summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Switzer <dswitzer@xevo.com>2017-04-13 11:24:07 -0700
committerDavid Switzer <dswitzer@xevo.com>2017-04-13 11:24:07 -0700
commit2eae58e32465d76b854bce166230faa4c12fe4b5 (patch)
treee99e7cc0fff8c45014fbbdd145d05d5b0ca5e323
parent5d6b00d031dc6ec100f359144218f73f088aceb4 (diff)
downloadsdl_ios-2eae58e32465d76b854bce166230faa4c12fe4b5.tar.gz
Review feedback incorporated into SDLIAPTransport class.
-rw-r--r--SmartDeviceLink/SDLIAPTransport.m53
1 files changed, 31 insertions, 22 deletions
diff --git a/SmartDeviceLink/SDLIAPTransport.m b/SmartDeviceLink/SDLIAPTransport.m
index b2c5f7ec4..f33cf1aed 100644
--- a/SmartDeviceLink/SDLIAPTransport.m
+++ b/SmartDeviceLink/SDLIAPTransport.m
@@ -89,7 +89,7 @@ int const streamOpenTimeoutSeconds = 2;
#pragma mark - EAAccessory Notifications
- (void)sdl_accessoryConnected:(NSNotification *)notification {
- EAAccessory *accessory = [notification.userInfo objectForKey:EAAccessoryKey];
+ EAAccessory *accessory = notification.userInfo[EAAccessoryKey];
NSMutableString *logMessage = [NSMutableString stringWithFormat:@"Accessory Connected, Opening in %0.03fs", self.retryDelay];
[SDLDebugTool logInfo:logMessage withType:SDLDebugType_Transport_iAP toOutput:SDLDebugOutput_All toGroup:self.debugConsoleGroupName];
@@ -130,7 +130,7 @@ int const streamOpenTimeoutSeconds = 2;
- (void)sdl_connect:(EAAccessory *)accessory {
if (!self.session && !self.sessionSetupInProgress) {
self.sessionSetupInProgress = YES;
- [self sdl_establishSession:accessory];
+ [self sdl_establishSessionWithAccessory:accessory];
} else if (self.session) {
[SDLDebugTool logInfo:@"Session already established."];
} else {
@@ -140,7 +140,9 @@ int const streamOpenTimeoutSeconds = 2;
- (void)disconnect {
[SDLDebugTool logInfo:@"IAP Disconnecting" withType:SDLDebugType_Transport_iAP toOutput:SDLDebugOutput_All toGroup:self.debugConsoleGroupName];
-
+ // Stop event listening here so that even if the transport is disconnected by the proxy
+ // we unregister for accessory local notifications
+ [self sdl_stopEventListening];
// Only disconnect the data session, the control session does not stay open and is handled separately
if (self.session != nil) {
[self.session stop];
@@ -158,14 +160,14 @@ int const streamOpenTimeoutSeconds = 2;
[self sdl_createIAPControlSessionWithAccessory:accessory];
connecting = YES;
} else if ([accessory supportsProtocol:legacyProtocolString]) {
- [self sdl_createIAPControlSessionWithAccessory:accessory];
- connecting = YES;
+ [self sdl_createIAPDataSessionWithAccessory:accessory forProtocol:legacyProtocolString];
+ connecting = YES;
}
return connecting;
}
-- (void)sdl_establishSession:(EAAccessory *)accessory {
+- (void)sdl_establishSessionWithAccessory:(EAAccessory *)accessory {
[SDLDebugTool logInfo:@"Attempting To Connect"];
if (self.retryCounter < createSessionRetries) {
// We should be attempting to connect
@@ -174,18 +176,19 @@ int const streamOpenTimeoutSeconds = 2;
if (sdlAccessory != nil && [self sdl_tryConnectAccessory:sdlAccessory]){
// Connection underway, exit
return;
+ }
+
+ // Determine if we can start a multi-app session or a legacy (single-app) session
+ if ((sdlAccessory = [EAAccessoryManager findAccessoryForProtocol:controlProtocolString])) {
+ [self sdl_createIAPControlSessionWithAccessory:sdlAccessory];
+ } else if ((sdlAccessory = [EAAccessoryManager findAccessoryForProtocol:legacyProtocolString])) {
+ [self sdl_createIAPDataSessionWithAccessory:sdlAccessory forProtocol:legacyProtocolString];
} else {
- // Determine if we can start a multi-app session or a legacy (single-app) session
- if ((sdlAccessory = [EAAccessoryManager findAccessoryForProtocol:controlProtocolString])) {
- [self sdl_createIAPControlSessionWithAccessory:sdlAccessory];
- } else if ((sdlAccessory = [EAAccessoryManager findAccessoryForProtocol:legacyProtocolString])) {
- [self sdl_createIAPDataSessionWithAccessory:sdlAccessory forProtocol:legacyProtocolString];
- } else {
- // No compatible accessory
- [SDLDebugTool logInfo:@"No accessory supporting a required sync protocol was found."];
- self.sessionSetupInProgress = NO;
- }
+ // No compatible accessory
+ [SDLDebugTool logInfo:@"No accessory supporting a required sync protocol was found."];
+ self.sessionSetupInProgress = NO;
}
+
} else {
// We are beyond the number of retries allowed
[SDLDebugTool logInfo:@"Create session retries exhausted."];
@@ -304,9 +307,11 @@ int const streamOpenTimeoutSeconds = 2;
#pragma mark - Data Transmission
- (void)sendData:(NSData *)data {
- if (self.session != nil && self.session.accessory.connected){
- [self.session sendData:data];
+ if (self.session == nil || !self.session.accessory.connected) {
+ return;
}
+
+ [self.session sendData:data];
}
@@ -349,14 +354,18 @@ int const streamOpenTimeoutSeconds = 2;
// Destroy the control session
[strongSelf.protocolIndexTimer cancel];
- [strongSelf.controlSession stop];
- strongSelf.controlSession.streamDelegate = nil;
- strongSelf.controlSession = nil;
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ [strongSelf.controlSession stop];
+ strongSelf.controlSession.streamDelegate = nil;
+ strongSelf.controlSession = nil;
+ });
// Determine protocol string of the data session, then create that data session
NSString *indexedProtocolString = [NSString stringWithFormat:@"%@%@", indexedProtocolStringPrefix, @(buf[0])];
if (accessory.isConnected){
- [strongSelf sdl_createIAPDataSessionWithAccessory:accessory forProtocol:indexedProtocolString];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [strongSelf sdl_createIAPDataSessionWithAccessory:accessory forProtocol:indexedProtocolString];
+ });
}
}
};