Merge pull request #28 from PeelTechnologies/closeError

add a listening flag to keep server sockets alive
This commit is contained in:
Andy Prock 2016-12-30 08:33:04 -08:00 committed by GitHub
commit 06ef01d2d2

View File

@ -18,6 +18,7 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
NSMutableDictionary<NSNumber *, RCTResponseSenderBlock> *_pendingSends; NSMutableDictionary<NSNumber *, RCTResponseSenderBlock> *_pendingSends;
NSLock *_lock; NSLock *_lock;
long _sendTag; long _sendTag;
BOOL _isListening;
} }
- (id)initWithClientId:(NSNumber *)clientID andConfig:(id<SocketClientDelegate>)aDelegate; - (id)initWithClientId:(NSNumber *)clientID andConfig:(id<SocketClientDelegate>)aDelegate;
@ -45,6 +46,7 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
_clientDelegate = aDelegate; _clientDelegate = aDelegate;
_pendingSends = [NSMutableDictionary dictionary]; _pendingSends = [NSMutableDictionary dictionary];
_lock = [[NSLock alloc] init]; _lock = [[NSLock alloc] init];
_isListening = NO;
_tcpSocket = tcpSocket; _tcpSocket = tcpSocket;
} }
@ -121,13 +123,13 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
if ([@"0.0.0.0" isEqualToString: host]) { if ([@"0.0.0.0" isEqualToString: host]) {
host = @"localhost"; host = @"localhost";
} }
BOOL result = [_tcpSocket acceptOnInterface:host port:port error:error]; _isListening = [_tcpSocket acceptOnInterface:host port:port error:error];
if (result == YES) { if (_isListening == YES) {
[_clientDelegate onConnect: self]; [_clientDelegate onConnect: self];
[_tcpSocket readDataWithTimeout:-1 tag:_id.longValue]; [_tcpSocket readDataWithTimeout:-1 tag:_id.longValue];
} }
return result; return _isListening;
} }
- (void)setPendingSend:(RCTResponseSenderBlock)callback forKey:(NSNumber *)key - (void)setPendingSend:(RCTResponseSenderBlock)callback forKey:(NSNumber *)key
@ -188,11 +190,13 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
- (void)end - (void)end
{ {
_isListening = NO;
[_tcpSocket disconnectAfterWriting]; [_tcpSocket disconnectAfterWriting];
} }
- (void)destroy - (void)destroy
{ {
_isListening = NO;
[_tcpSocket disconnect]; [_tcpSocket disconnect];
} }
@ -231,7 +235,9 @@ NSString *const RCTTCPErrorDomain = @"RCTTCPErrorDomain";
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err - (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
{ {
if (!_clientDelegate) return; if (!_clientDelegate) return;
[_clientDelegate onClose:self withError:(!err || err.code == GCDAsyncSocketClosedError ? nil : err)]; if (_isListening == NO) {
[_clientDelegate onClose:self withError:(!err || err.code == GCDAsyncSocketClosedError ? nil : err)];
}
} }
- (NSError *)badInvocationError:(NSString *)errMsg - (NSError *)badInvocationError:(NSString *)errMsg