70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
{
OFThread *_sourceThread;
OFTCPSocket *_socket;
OFString *_host;
uint16_t _port;
id _target;
SEL _selector;
# ifdef OF_HAVE_BLOCKS
of_tcp_socket_async_connect_block_t _block;
# endif
OFException *_exception;
}
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector;
# ifdef OF_HAVE_BLOCKS
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
block: (of_tcp_socket_async_connect_block_t)block;
# endif
@end
@implementation OFTCPSocket_ConnectThread
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector
{
self = [super init];
@try {
_sourceThread = [sourceThread retain];
_socket = [socket retain];
_host = [host copy];
_port = port;
_target = [target retain];
_selector = selector;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
>
|
>
>
>
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
{
OFThread *_sourceThread;
OFTCPSocket *_socket;
OFString *_host;
uint16_t _port;
id _target;
SEL _selector;
id _context;
# ifdef OF_HAVE_BLOCKS
of_tcp_socket_async_connect_block_t _block;
# endif
OFException *_exception;
}
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector
context: (id)context;
# ifdef OF_HAVE_BLOCKS
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
block: (of_tcp_socket_async_connect_block_t)block;
# endif
@end
@implementation OFTCPSocket_ConnectThread
- initWithSourceThread: (OFThread *)sourceThread
socket: (OFTCPSocket *)socket
host: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector
context: (id)context
{
self = [super init];
@try {
_sourceThread = [sourceThread retain];
_socket = [socket retain];
_host = [host copy];
_port = port;
_target = [target retain];
_selector = selector;
_context = [context retain];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
|
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
- (void)dealloc
{
[_sourceThread release];
[_socket release];
[_host release];
[_target release];
# ifdef OF_HAVE_BLOCKS
[_block release];
# endif
[_exception release];
[super dealloc];
}
- (void)didConnect
{
[self join];
# ifdef OF_HAVE_BLOCKS
if (_block != NULL)
_block(_socket, _exception);
else {
# endif
void (*func)(id, SEL, OFTCPSocket *, OFException *) =
(void (*)(id, SEL, OFTCPSocket *, OFException *))[_target
methodForSelector: _selector];
func(_target, _selector, _socket, _exception);
# ifdef OF_HAVE_BLOCKS
}
# endif
}
- (id)main
{
|
>
|
|
|
|
|
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
- (void)dealloc
{
[_sourceThread release];
[_socket release];
[_host release];
[_target release];
[_context release];
# ifdef OF_HAVE_BLOCKS
[_block release];
# endif
[_exception release];
[super dealloc];
}
- (void)didConnect
{
[self join];
# ifdef OF_HAVE_BLOCKS
if (_block != NULL)
_block(_socket, _exception);
else {
# endif
void (*func)(id, SEL, OFTCPSocket *, id, OFException *) =
(void (*)(id, SEL, OFTCPSocket *, id, OFException *))
[_target methodForSelector: _selector];
func(_target, _selector, _socket, _context, _exception);
# ifdef OF_HAVE_BLOCKS
}
# endif
}
- (id)main
{
|
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
|
}
#ifdef OF_HAVE_THREADS
- (void)asyncConnectToHost: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector
{
void *pool = objc_autoreleasePoolPush();
[[[[OFTCPSocket_ConnectThread alloc]
initWithSourceThread: [OFThread currentThread]
socket: self
host: host
port: port
target: target
selector: selector] autorelease] start];
objc_autoreleasePoolPop(pool);
}
# ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToHost: (OFString *)host
port: (uint16_t)port
|
>
|
>
|
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
}
#ifdef OF_HAVE_THREADS
- (void)asyncConnectToHost: (OFString *)host
port: (uint16_t)port
target: (id)target
selector: (SEL)selector
context: (id)context
{
void *pool = objc_autoreleasePoolPush();
[[[[OFTCPSocket_ConnectThread alloc]
initWithSourceThread: [OFThread currentThread]
socket: self
host: host
port: port
target: target
selector: selector
context: context] autorelease] start];
objc_autoreleasePoolPop(pool);
}
# ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToHost: (OFString *)host
port: (uint16_t)port
|
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
|
}
return client;
}
- (void)asyncAcceptWithTarget: (id)target
selector: (SEL)selector
{
[OFRunLoop of_addAsyncAcceptForTCPSocket: self
target: target
selector: selector];
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncAcceptWithBlock: (of_tcp_socket_async_accept_block_t)block
{
[OFRunLoop of_addAsyncAcceptForTCPSocket: self
block: block];
|
>
|
>
|
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
|
}
return client;
}
- (void)asyncAcceptWithTarget: (id)target
selector: (SEL)selector
context: (id)context
{
[OFRunLoop of_addAsyncAcceptForTCPSocket: self
target: target
selector: selector
context: context];
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncAcceptWithBlock: (of_tcp_socket_async_accept_block_t)block
{
[OFRunLoop of_addAsyncAcceptForTCPSocket: self
block: block];
|