iOS VOIP socket over bluetooth PAN closed on screen locked
- (IBAction)didTapConnect:(id)sender { if (!self.inputStream) { // 1 CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)(self.txtIP.text), [self.txtPort.text intValue], &readStream, &writeStream); // 2 self.sentPing = NO; self.communicationLog = [[NSMutableString alloc] init]; self.inputStream = (__bridge_transfer NSInputStream *)readStream; self.outputStream = (__bridge_transfer NSOutputStream *)writeStream; [self.inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]; // 3 [self.inputStream setDelegate:self]; [self.outputStream setDelegate:self]; [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; // 4 [self.inputStream open]; [self.outputStream open]; // 5 [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ if (self.outputStream) { [self.outputStream write:pingString maxLength:strlen((char*)pingString)]; [self addEvent:@"Ping sent"]; } }]; } } - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { case NSStreamEventNone: // do nothing. break; case NSStreamEventEndEncountered: [self addEvent:@"Connection Closed"]; break; case NSStreamEventErrorOccurred: [self addEvent:[NSString stringWithFormat:@"Had error: %@", aStream.streamError]]; break; case NSStreamEventHasBytesAvailable: if (aStream == self.inputStream) { uint8_t buffer[1024]; NSInteger bytesRead = [self.inputStream read:buffer maxLength:1024]; NSString *stringRead = [[NSString alloc] initWithBytes:buffer length:bytesRead encoding:NSUTF8StringEncoding]; stringRead = [stringRead stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; [self addEvent:[NSString stringWithFormat:@"Received: %@", stringRead]]; if ([stringRead isEqualToString:@"notify"]) { UILocalNotification *notification = [[UILocalNotification alloc] init]; notification.alertBody = @"New VOIP call"; notification.alertAction = @"Answer"; [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; } else if ([stringRead isEqualToString:@"ping"]) { [self.outputStream write:pongString maxLength:strlen((char*)pongString)]; } } break; case NSStreamEventHasSpaceAvailable: if (aStream == self.outputStream && !self.sentPing) { self.sentPing = YES; if (aStream == self.outputStream) { [self.outputStream write:pingString maxLength:strlen((char*)pingString)]; [self addEvent:@"Ping sent"]; } } break; case NSStreamEventOpenCompleted: if (aStream == self.inputStream) { [self addEvent:@"Connection Opened"]; } break; default: break; } } _______________________________________________ Do not post admin requests to the list. They will be ignored. Bluetooth-dev mailing list (Bluetooth-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/bluetooth-dev/site_archiver%40lists.... This email sent to site_archiver@lists.apple.com
participants (1)
-
Yu Zhenyang