Reputation: 1318
I'm currently creating a chat app based off of Rey Wenderlich's chat app tutorial which is going great except I can't seem to reconnect without having to run the app from Xcode again.
It goes something like this: run server
-> run app
(At this point, everything is great) then I stop server
-> run server
again at which point my streams refuse to reconnect and keep giving me the erorr: Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused"
.
Any ideas why this is?
Method to init streams:
- (void)initStreams {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)SERVER_IP, port, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
inputStream.delegate = self;
outputStream.delegate = self;
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
My delegate
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
NSString *streamName = @"Output Stream";
if (aStream == inputStream) {
streamName = @"Input Stream";
}
switch (eventCode) {
case NSStreamEventOpenCompleted:
NSLog(@"%@ opened! (%lu)",streamName, eventCode);
[_delegate socketDidOpenSuccessfully];
break;
case NSStreamEventHasBytesAvailable:
[self readDataFromStream:aStream];
break;
case NSStreamEventErrorOccurred:
NSLog(@"Error: %@",[aStream streamError]);
[self resetStreams];
break;
case NSStreamEventEndEncountered:
NSLog(@"%@ read ended! (%lu)",streamName, eventCode);
[self resetStreams];
break;
default:
NSLog(@"Unknown %@: %d",streamName, (int)eventCode);
break;
}
}
Reset streams Method:
- (void)resetStreams {
NSLog(@"Reseting!");
toSend = [NSMutableArray new];
_loginStatus = LTLoginStatusLoggedOut;
[inputStream close];
[outputStream close];
[self performSelector:@selector(initStreams) withObject:self afterDelay:2];
}
Upvotes: 1
Views: 569
Reputation: 1318
So after hours of frustration, I decided to just wrap it in another object and re instantiate that whenever it gets disconnected. Seems to work whereas re-initiating the stream does not.
Upvotes: 1