From bbf717823492871887cba96d784c92f2358f769c Mon Sep 17 00:00:00 2001 From: Benjamin Faal <351538@imacg836002.ws.saxion.nl> Date: Wed, 15 Jun 2016 11:04:54 +0200 Subject: [PATCH 1/9] added extra methods to send custom json data --- Lib/ARDAppClient.h | 32 +++++++++++++++++++++----------- Lib/ARDAppClient.m | 32 +++++++++++++++++++++++++++++++- Lib/ARDSignalingMessage.h | 19 +++++++++++++++---- Lib/ARDSignalingMessage.m | 29 ++++++++++++++++++++++++++++- 4 files changed, 95 insertions(+), 17 deletions(-) diff --git a/Lib/ARDAppClient.h b/Lib/ARDAppClient.h index 3db1db6..ed38994 100755 --- a/Lib/ARDAppClient.h +++ b/Lib/ARDAppClient.h @@ -29,26 +29,32 @@ #import "RTCVideoTrack.h" +@interface RTCMessageReceiver : NSObject + +- (void)didReceiveMessage:(NSString *)message; + +@end + typedef NS_ENUM(NSInteger, ARDAppClientState) { - // Disconnected from servers. - kARDAppClientStateDisconnected, - // Connecting to servers. - kARDAppClientStateConnecting, - // Connected to servers. - kARDAppClientStateConnected, + // Disconnected from servers. + kARDAppClientStateDisconnected, + // Connecting to servers. + kARDAppClientStateConnecting, + // Connected to servers. + kARDAppClientStateConnected, }; @class ARDAppClient; @protocol ARDAppClientDelegate - (void)appClient:(ARDAppClient *)client - didChangeState:(ARDAppClientState)state; + didChangeState:(ARDAppClientState)state; - (void)appClient:(ARDAppClient *)client - didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack; +didReceiveLocalVideoTrack:(RTCVideoTrack *)localVideoTrack; - (void)appClient:(ARDAppClient *)client - didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; +didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; - (void)appClient:(ARDAppClient *)client didError:(NSError *)error; @@ -69,7 +75,11 @@ typedef NS_ENUM(NSInteger, ARDAppClientState) { // for call configurations such as overriding server choice, specifying codecs // and so on. - (void)connectToRoomWithId:(NSString *)roomId - options:(NSDictionary *)options; + options:(NSDictionary *)options + messageReceiver:(RTCMessageReceiver *)messageReceiver; + +- (void)sendData:(NSString *)tag + data:(NSDictionary *)data; // Mute and unmute Audio-In - (void)muteAudioIn; @@ -90,4 +100,4 @@ typedef NS_ENUM(NSInteger, ARDAppClientState) { // Disconnects from the AppRTC servers and any connected clients. - (void)disconnect; -@end +@end \ No newline at end of file diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 653c4b7..b593e37 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -94,6 +94,8 @@ @interface ARDAppClient () Date: Wed, 15 Jun 2016 11:29:43 +0200 Subject: [PATCH 2/9] small bug fix --- Lib/ARDAppClient.h | 3 ++- Lib/ARDAppClient.m | 10 ++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Lib/ARDAppClient.h b/Lib/ARDAppClient.h index ed38994..c501ec0 100755 --- a/Lib/ARDAppClient.h +++ b/Lib/ARDAppClient.h @@ -31,7 +31,8 @@ @interface RTCMessageReceiver : NSObject -- (void)didReceiveMessage:(NSString *)message; +- (void)didReceiveMessage:(NSString *)tag + data:(NSDictionary *)data; @end diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index b593e37..9f43a14 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -270,8 +270,14 @@ - (void)channel:(ARDWebSocketChannel *)channel didReceiveMessage:(ARDSignalingMessage *)message { switch (message.type) { case kARDSignalingMessageTypeCustomMessage: - if (_messageReceiver != nil) { - [_messageReceiver didReceiveMessage:([[NSString alloc] initWithData:message.JSONData encoding:NSUTF8StringEncoding])]; + NSLog(@"INCOMING CUSTOM MSG:"); + NSLog(message); + + if (_messageReceiver) { + NSError * err; + NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NSJSONReadingMutableContainers error:&err]; + + [_messageReceiver didReceiveMessage:json[@"tag"] data:json[@"data"]]; } break; From e852cbb60d60a0e868213d7a2babafe3d2208fd4 Mon Sep 17 00:00:00 2001 From: BenjaminFaal Date: Wed, 15 Jun 2016 11:36:20 +0200 Subject: [PATCH 3/9] Update ARDAppClient.m --- Lib/ARDAppClient.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 9f43a14..d608d9a 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -177,7 +177,7 @@ - (void)sendData:(NSString *)tag NSString * finalJsonData = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:json options:0 error:&err] encoding:NSUTF8StringEncoding]; ARDSignalingMessage *message = [ARDSignalingMessage messageFromJSONString:(finalJsonData)]; - [self sendSignalingMessageToCollider:message]; + [self sendSignalingMessage:message]; } - (void)connectToRoomWithId:(NSString *)roomId From e831944f6dff8f9d2186f64835ae05794cdca56c Mon Sep 17 00:00:00 2001 From: BenjaminFaal Date: Wed, 15 Jun 2016 12:36:28 +0200 Subject: [PATCH 4/9] Update ARDAppClient.h --- Lib/ARDAppClient.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/ARDAppClient.h b/Lib/ARDAppClient.h index c501ec0..1fce863 100755 --- a/Lib/ARDAppClient.h +++ b/Lib/ARDAppClient.h @@ -32,7 +32,7 @@ @interface RTCMessageReceiver : NSObject - (void)didReceiveMessage:(NSString *)tag - data:(NSDictionary *)data; + data:(NSDictionary *)data; @end @@ -101,4 +101,4 @@ didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; // Disconnects from the AppRTC servers and any connected clients. - (void)disconnect; -@end \ No newline at end of file +@end From 739ef873b6b8c3d0294dc38e4d95b92fbdda4811 Mon Sep 17 00:00:00 2001 From: BenjaminFaal Date: Wed, 15 Jun 2016 12:41:23 +0200 Subject: [PATCH 5/9] Update ARDAppClient.m --- Lib/ARDAppClient.m | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index d608d9a..ce2e422 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -269,18 +269,16 @@ - (void)disconnect { - (void)channel:(ARDWebSocketChannel *)channel didReceiveMessage:(ARDSignalingMessage *)message { switch (message.type) { - case kARDSignalingMessageTypeCustomMessage: + case kARDSignalingMessageTypeCustomMessage: + { NSLog(@"INCOMING CUSTOM MSG:"); NSLog(message); - - if (_messageReceiver) { NSError * err; NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NSJSONReadingMutableContainers error:&err]; [_messageReceiver didReceiveMessage:json[@"tag"] data:json[@"data"]]; - } - break; - + } + break; case kARDSignalingMessageTypeOffer: case kARDSignalingMessageTypeAnswer: _hasReceivedSdp = YES; From 4d2f45fdfaf3cc4458603db8349b67b8ee3d114e Mon Sep 17 00:00:00 2001 From: Benjamin Faal <351538@imacg836002.ws.saxion.nl> Date: Wed, 15 Jun 2016 13:08:50 +0200 Subject: [PATCH 6/9] small fix --- Lib/ARDAppClient.h | 4 +- Lib/ARDAppClient.m | 850 +++++++++++++++++++------------------- Lib/ARDSignalingMessage.m | 5 +- 3 files changed, 423 insertions(+), 436 deletions(-) diff --git a/Lib/ARDAppClient.h b/Lib/ARDAppClient.h index c501ec0..1fce863 100755 --- a/Lib/ARDAppClient.h +++ b/Lib/ARDAppClient.h @@ -32,7 +32,7 @@ @interface RTCMessageReceiver : NSObject - (void)didReceiveMessage:(NSString *)tag - data:(NSDictionary *)data; + data:(NSDictionary *)data; @end @@ -101,4 +101,4 @@ didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; // Disconnects from the AppRTC servers and any connected clients. - (void)disconnect; -@end \ No newline at end of file +@end diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 9f43a14..37f1ad0 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -49,20 +49,20 @@ // TODO(tkchin): move these to a configuration object. static NSString *kARDRoomServerHostUrl = - @"https://apprtc.appspot.com"; +@"https://apprtc.appspot.com"; static NSString *kARDRoomServerRegisterFormat = - @"%@/join/%@"; +@"%@/join/%@"; static NSString *kARDRoomServerMessageFormat = - @"%@/message/%@/%@"; +@"%@/message/%@/%@"; static NSString *kARDRoomServerByeFormat = - @"%@/leave/%@/%@"; +@"%@/leave/%@/%@"; static NSString *kARDDefaultSTUNServerUrl = - @"stun:stun.l.google.com:19302"; +@"stun:stun.l.google.com:19302"; // TODO(tkchin): figure out a better username for CEOD statistics. static NSString *kARDTurnRequestUrl = - @"https://computeengineondemand.appspot.com" - @"/turn?username=iapprtc&key=4080218913"; +@"https://computeengineondemand.appspot.com" +@"/turn?username=iapprtc&key=4080218913"; static NSString *kARDAppClientErrorDomain = @"ARDAppClient"; static NSInteger kARDAppClientErrorUnknown = -1; @@ -74,7 +74,7 @@ static NSInteger kARDAppClientErrorInvalidRoom = -7; @interface ARDAppClient () +RTCPeerConnectionDelegate, RTCSessionDescriptionDelegate> @property(nonatomic, strong) ARDWebSocketChannel *channel; @property(nonatomic, strong) RTCPeerConnection *peerConnection; @property(nonatomic, strong) RTCPeerConnectionFactory *factory; @@ -118,25 +118,25 @@ @implementation ARDAppClient @synthesize webSocketRestURL = _websocketRestURL; - (instancetype)initWithDelegate:(id)delegate { - if (self = [super init]) { - _delegate = delegate; - _factory = [[RTCPeerConnectionFactory alloc] init]; - _messageQueue = [NSMutableArray array]; - _iceServers = [NSMutableArray arrayWithObject:[self defaultSTUNServer]]; - _serverHostUrl = kARDRoomServerHostUrl; - _isSpeakerEnabled = YES; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(orientationChanged:) - name:@"UIDeviceOrientationDidChangeNotification" - object:nil]; - } - return self; + if (self = [super init]) { + _delegate = delegate; + _factory = [[RTCPeerConnectionFactory alloc] init]; + _messageQueue = [NSMutableArray array]; + _iceServers = [NSMutableArray arrayWithObject:[self defaultSTUNServer]]; + _serverHostUrl = kARDRoomServerHostUrl; + _isSpeakerEnabled = YES; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(orientationChanged:) + name:@"UIDeviceOrientationDidChangeNotification" + object:nil]; + } + return self; } - (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil]; - [self disconnect]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil]; + [self disconnect]; } - (void)orientationChanged:(NSNotification *)notification { @@ -158,209 +158,199 @@ - (void)orientationChanged:(NSNotification *)notification { - (void)setState:(ARDAppClientState)state { - if (_state == state) { - return; - } - _state = state; - [_delegate appClient:self didChangeState:_state]; + if (_state == state) { + return; + } + _state = state; + [_delegate appClient:self didChangeState:_state]; } - (void)sendData:(NSString *)tag - data:(NSDictionary *)data { - NSError * err; - NSDictionary * json = @{ - @"type": @"custom", - @"tag": tag, - @"data" : [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:&err] encoding:NSUTF8StringEncoding] - }; - - NSString * finalJsonData = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:json options:0 error:&err] encoding:NSUTF8StringEncoding]; - - ARDSignalingMessage *message = [ARDSignalingMessage messageFromJSONString:(finalJsonData)]; - [self sendSignalingMessageToCollider:message]; + data:(NSDictionary *)data { + ARDCustomMessage *customMessage = [[ARDCustomMessage alloc] initWithTagAndData:tag data:data]; + NSData *customData = [customMessage JSONData]; + [_channel sendData:customData]; } - (void)connectToRoomWithId:(NSString *)roomId options:(NSDictionary *)options messageReceiver:(RTCMessageReceiver *)messageReceiver { - NSParameterAssert(roomId.length); - NSParameterAssert(_state == kARDAppClientStateDisconnected); - self.state = kARDAppClientStateConnecting; - + NSParameterAssert(roomId.length); + NSParameterAssert(_state == kARDAppClientStateDisconnected); + self.state = kARDAppClientStateConnecting; + self.messageReceiver = messageReceiver; - // Request TURN. - __weak ARDAppClient *weakSelf = self; - NSURL *turnRequestURL = [NSURL URLWithString:kARDTurnRequestUrl]; - [self requestTURNServersWithURL:turnRequestURL - completionHandler:^(NSArray *turnServers) { - ARDAppClient *strongSelf = weakSelf; - [strongSelf.iceServers addObjectsFromArray:turnServers]; - strongSelf.isTurnComplete = YES; - [strongSelf startSignalingIfReady]; - }]; - - // Register with room server. - [self registerWithRoomServerForRoomId:roomId - completionHandler:^(ARDRegisterResponse *response) { - ARDAppClient *strongSelf = weakSelf; - if (!response || response.result != kARDRegisterResultTypeSuccess) { - NSLog(@"Failed to register with room server. Result:%d", - (int)response.result); - [strongSelf disconnect]; - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: @"Room is full.", - }; - NSError *error = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorRoomFull - userInfo:userInfo]; - [strongSelf.delegate appClient:strongSelf didError:error]; - return; - } - NSLog(@"Registered with room server."); - strongSelf.roomId = response.roomId; - strongSelf.clientId = response.clientId; - strongSelf.isInitiator = response.isInitiator; - for (ARDSignalingMessage *message in response.messages) { - if (message.type == kARDSignalingMessageTypeOffer || - message.type == kARDSignalingMessageTypeAnswer) { - strongSelf.hasReceivedSdp = YES; - [strongSelf.messageQueue insertObject:message atIndex:0]; - } else { - [strongSelf.messageQueue addObject:message]; - } - } - strongSelf.webSocketURL = response.webSocketURL; - strongSelf.webSocketRestURL = response.webSocketRestURL; - [strongSelf registerWithColliderIfReady]; - [strongSelf startSignalingIfReady]; - }]; + // Request TURN. + __weak ARDAppClient *weakSelf = self; + NSURL *turnRequestURL = [NSURL URLWithString:kARDTurnRequestUrl]; + [self requestTURNServersWithURL:turnRequestURL + completionHandler:^(NSArray *turnServers) { + ARDAppClient *strongSelf = weakSelf; + [strongSelf.iceServers addObjectsFromArray:turnServers]; + strongSelf.isTurnComplete = YES; + [strongSelf startSignalingIfReady]; + }]; + + // Register with room server. + [self registerWithRoomServerForRoomId:roomId + completionHandler:^(ARDRegisterResponse *response) { + ARDAppClient *strongSelf = weakSelf; + if (!response || response.result != kARDRegisterResultTypeSuccess) { + NSLog(@"Failed to register with room server. Result:%d", + (int)response.result); + [strongSelf disconnect]; + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: @"Room is full.", + }; + NSError *error = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorRoomFull + userInfo:userInfo]; + [strongSelf.delegate appClient:strongSelf didError:error]; + return; + } + NSLog(@"Registered with room server."); + strongSelf.roomId = response.roomId; + strongSelf.clientId = response.clientId; + strongSelf.isInitiator = response.isInitiator; + for (ARDSignalingMessage *message in response.messages) { + if (message.type == kARDSignalingMessageTypeOffer || + message.type == kARDSignalingMessageTypeAnswer) { + strongSelf.hasReceivedSdp = YES; + [strongSelf.messageQueue insertObject:message atIndex:0]; + } else { + [strongSelf.messageQueue addObject:message]; + } + } + strongSelf.webSocketURL = response.webSocketURL; + strongSelf.webSocketRestURL = response.webSocketRestURL; + [strongSelf registerWithColliderIfReady]; + [strongSelf startSignalingIfReady]; + }]; } - (void)disconnect { - if (_state == kARDAppClientStateDisconnected) { - return; - } - if (self.isRegisteredWithRoomServer) { - [self unregisterWithRoomServer]; - } - if (_channel) { - if (_channel.state == kARDWebSocketChannelStateRegistered) { - // Tell the other client we're hanging up. - ARDByeMessage *byeMessage = [[ARDByeMessage alloc] init]; - NSData *byeData = [byeMessage JSONData]; - [_channel sendData:byeData]; + if (_state == kARDAppClientStateDisconnected) { + return; + } + if (self.isRegisteredWithRoomServer) { + [self unregisterWithRoomServer]; } - // Disconnect from collider. - _channel = nil; - } - _clientId = nil; - _roomId = nil; - _isInitiator = NO; - _hasReceivedSdp = NO; - _messageQueue = [NSMutableArray array]; - _peerConnection = nil; - self.state = kARDAppClientStateDisconnected; + if (_channel) { + if (_channel.state == kARDWebSocketChannelStateRegistered) { + // Tell the other client we're hanging up. + ARDByeMessage *byeMessage = [[ARDByeMessage alloc] init]; + NSData *byeData = [byeMessage JSONData]; + [_channel sendData:byeData]; + } + // Disconnect from collider. + _channel = nil; + } + _clientId = nil; + _roomId = nil; + _isInitiator = NO; + _hasReceivedSdp = NO; + _messageQueue = [NSMutableArray array]; + _peerConnection = nil; + self.state = kARDAppClientStateDisconnected; } #pragma mark - ARDWebSocketChannelDelegate - (void)channel:(ARDWebSocketChannel *)channel - didReceiveMessage:(ARDSignalingMessage *)message { - switch (message.type) { - case kARDSignalingMessageTypeCustomMessage: - NSLog(@"INCOMING CUSTOM MSG:"); - NSLog(message); - - if (_messageReceiver) { - NSError * err; - NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NSJSONReadingMutableContainers error:&err]; - - [_messageReceiver didReceiveMessage:json[@"tag"] data:json[@"data"]]; - } - break; - - case kARDSignalingMessageTypeOffer: - case kARDSignalingMessageTypeAnswer: - _hasReceivedSdp = YES; - [_messageQueue insertObject:message atIndex:0]; - break; - case kARDSignalingMessageTypeCandidate: - [_messageQueue addObject:message]; - break; - case kARDSignalingMessageTypeBye: - [self processSignalingMessage:message]; - return; - } - [self drainMessageQueueIfReady]; +didReceiveMessage:(ARDSignalingMessage *)message { + switch (message.type) { + case kARDSignalingMessageTypeCustomMessage: + { + NSLog(@"INCOMING CUSTOM MSG:"); + NSLog(message); + NSError * err; + NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NSJSONReadingMutableContainers error:&err]; + + [_messageReceiver didReceiveMessage:json[@"tag"] data:json[@"data"]]; + } + break; + case kARDSignalingMessageTypeOffer: + case kARDSignalingMessageTypeAnswer: + _hasReceivedSdp = YES; + [_messageQueue insertObject:message atIndex:0]; + break; + case kARDSignalingMessageTypeCandidate: + [_messageQueue addObject:message]; + break; + case kARDSignalingMessageTypeBye: + [self processSignalingMessage:message]; + return; + } + [self drainMessageQueueIfReady]; } - (void)channel:(ARDWebSocketChannel *)channel - didChangeState:(ARDWebSocketChannelState)state { - switch (state) { - case kARDWebSocketChannelStateOpen: - break; - case kARDWebSocketChannelStateRegistered: - break; - case kARDWebSocketChannelStateClosed: - case kARDWebSocketChannelStateError: - // TODO(tkchin): reconnection scenarios. Right now we just disconnect - // completely if the websocket connection fails. - [self disconnect]; - break; - } + didChangeState:(ARDWebSocketChannelState)state { + switch (state) { + case kARDWebSocketChannelStateOpen: + break; + case kARDWebSocketChannelStateRegistered: + break; + case kARDWebSocketChannelStateClosed: + case kARDWebSocketChannelStateError: + // TODO(tkchin): reconnection scenarios. Right now we just disconnect + // completely if the websocket connection fails. + [self disconnect]; + break; + } } #pragma mark - RTCPeerConnectionDelegate - (void)peerConnection:(RTCPeerConnection *)peerConnection - signalingStateChanged:(RTCSignalingState)stateChanged { - NSLog(@"Signaling state changed: %d", stateChanged); + signalingStateChanged:(RTCSignalingState)stateChanged { + NSLog(@"Signaling state changed: %d", stateChanged); } - (void)peerConnection:(RTCPeerConnection *)peerConnection addedStream:(RTCMediaStream *)stream { - dispatch_async(dispatch_get_main_queue(), ^{ - NSLog(@"Received %lu video tracks and %lu audio tracks", - (unsigned long)stream.videoTracks.count, - (unsigned long)stream.audioTracks.count); - if (stream.videoTracks.count) { - RTCVideoTrack *videoTrack = stream.videoTracks[0]; - [_delegate appClient:self didReceiveRemoteVideoTrack:videoTrack]; - if (_isSpeakerEnabled) [self enableSpeaker]; //Use the "handsfree" speaker instead of the ear speaker. - - } - }); + dispatch_async(dispatch_get_main_queue(), ^{ + NSLog(@"Received %lu video tracks and %lu audio tracks", + (unsigned long)stream.videoTracks.count, + (unsigned long)stream.audioTracks.count); + if (stream.videoTracks.count) { + RTCVideoTrack *videoTrack = stream.videoTracks[0]; + [_delegate appClient:self didReceiveRemoteVideoTrack:videoTrack]; + if (_isSpeakerEnabled) [self enableSpeaker]; //Use the "handsfree" speaker instead of the ear speaker. + + } + }); } - (void)peerConnection:(RTCPeerConnection *)peerConnection - removedStream:(RTCMediaStream *)stream { - NSLog(@"Stream was removed."); + removedStream:(RTCMediaStream *)stream { + NSLog(@"Stream was removed."); } - (void)peerConnectionOnRenegotiationNeeded: - (RTCPeerConnection *)peerConnection { - NSLog(@"WARNING: Renegotiation needed but unimplemented."); +(RTCPeerConnection *)peerConnection { + NSLog(@"WARNING: Renegotiation needed but unimplemented."); } - (void)peerConnection:(RTCPeerConnection *)peerConnection - iceConnectionChanged:(RTCICEConnectionState)newState { - NSLog(@"ICE state changed: %d", newState); + iceConnectionChanged:(RTCICEConnectionState)newState { + NSLog(@"ICE state changed: %d", newState); } - (void)peerConnection:(RTCPeerConnection *)peerConnection - iceGatheringChanged:(RTCICEGatheringState)newState { - NSLog(@"ICE gathering state changed: %d", newState); + iceGatheringChanged:(RTCICEGatheringState)newState { + NSLog(@"ICE gathering state changed: %d", newState); } - (void)peerConnection:(RTCPeerConnection *)peerConnection gotICECandidate:(RTCICECandidate *)candidate { - dispatch_async(dispatch_get_main_queue(), ^{ - ARDICECandidateMessage *message = + dispatch_async(dispatch_get_main_queue(), ^{ + ARDICECandidateMessage *message = [[ARDICECandidateMessage alloc] initWithCandidate:candidate]; - [self sendSignalingMessage:message]; - }); + [self sendSignalingMessage:message]; + }); } - (void)peerConnection:(RTCPeerConnection*)peerConnection @@ -370,136 +360,136 @@ - (void)peerConnection:(RTCPeerConnection*)peerConnection #pragma mark - RTCSessionDescriptionDelegate - (void)peerConnection:(RTCPeerConnection *)peerConnection - didCreateSessionDescription:(RTCSessionDescription *)sdp - error:(NSError *)error { - dispatch_async(dispatch_get_main_queue(), ^{ - if (error) { - NSLog(@"Failed to create session description. Error: %@", error); - [self disconnect]; - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: @"Failed to create session description.", - }; - NSError *sdpError = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorCreateSDP - userInfo:userInfo]; - [_delegate appClient:self didError:sdpError]; - return; - } - [_peerConnection setLocalDescriptionWithDelegate:self - sessionDescription:sdp]; - ARDSessionDescriptionMessage *message = +didCreateSessionDescription:(RTCSessionDescription *)sdp + error:(NSError *)error { + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + NSLog(@"Failed to create session description. Error: %@", error); + [self disconnect]; + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: @"Failed to create session description.", + }; + NSError *sdpError = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorCreateSDP + userInfo:userInfo]; + [_delegate appClient:self didError:sdpError]; + return; + } + [_peerConnection setLocalDescriptionWithDelegate:self + sessionDescription:sdp]; + ARDSessionDescriptionMessage *message = [[ARDSessionDescriptionMessage alloc] initWithDescription:sdp]; - [self sendSignalingMessage:message]; - }); + [self sendSignalingMessage:message]; + }); } - (void)peerConnection:(RTCPeerConnection *)peerConnection - didSetSessionDescriptionWithError:(NSError *)error { - dispatch_async(dispatch_get_main_queue(), ^{ - if (error) { - NSLog(@"Failed to set session description. Error: %@", error); - [self disconnect]; - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: @"Failed to set session description.", - }; - NSError *sdpError = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorSetSDP - userInfo:userInfo]; - [_delegate appClient:self didError:sdpError]; - return; - } - // If we're answering and we've just set the remote offer we need to create - // an answer and set the local description. - if (!_isInitiator && !_peerConnection.localDescription) { - RTCMediaConstraints *constraints = [self defaultAnswerConstraints]; - [_peerConnection createAnswerWithDelegate:self - constraints:constraints]; - - } - }); +didSetSessionDescriptionWithError:(NSError *)error { + dispatch_async(dispatch_get_main_queue(), ^{ + if (error) { + NSLog(@"Failed to set session description. Error: %@", error); + [self disconnect]; + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey: @"Failed to set session description.", + }; + NSError *sdpError = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorSetSDP + userInfo:userInfo]; + [_delegate appClient:self didError:sdpError]; + return; + } + // If we're answering and we've just set the remote offer we need to create + // an answer and set the local description. + if (!_isInitiator && !_peerConnection.localDescription) { + RTCMediaConstraints *constraints = [self defaultAnswerConstraints]; + [_peerConnection createAnswerWithDelegate:self + constraints:constraints]; + + } + }); } #pragma mark - Private - (BOOL)isRegisteredWithRoomServer { - return _clientId.length; + return _clientId.length; } - (void)startSignalingIfReady { - if (!_isTurnComplete || !self.isRegisteredWithRoomServer) { - return; - } - self.state = kARDAppClientStateConnected; - - // Create peer connection. - RTCMediaConstraints *constraints = [self defaultPeerConnectionConstraints]; - _peerConnection = [_factory peerConnectionWithICEServers:_iceServers - constraints:constraints - delegate:self]; - RTCMediaStream *localStream = [self createLocalMediaStream]; - [_peerConnection addStream:localStream]; - if (_isInitiator) { - [self sendOffer]; - } else { - [self waitForAnswer]; - } + if (!_isTurnComplete || !self.isRegisteredWithRoomServer) { + return; + } + self.state = kARDAppClientStateConnected; + + // Create peer connection. + RTCMediaConstraints *constraints = [self defaultPeerConnectionConstraints]; + _peerConnection = [_factory peerConnectionWithICEServers:_iceServers + constraints:constraints + delegate:self]; + RTCMediaStream *localStream = [self createLocalMediaStream]; + [_peerConnection addStream:localStream]; + if (_isInitiator) { + [self sendOffer]; + } else { + [self waitForAnswer]; + } } - (void)sendOffer { - [_peerConnection createOfferWithDelegate:self - constraints:[self defaultOfferConstraints]]; + [_peerConnection createOfferWithDelegate:self + constraints:[self defaultOfferConstraints]]; } - (void)waitForAnswer { - [self drainMessageQueueIfReady]; + [self drainMessageQueueIfReady]; } - (void)drainMessageQueueIfReady { - if (!_peerConnection || !_hasReceivedSdp) { - return; - } - for (ARDSignalingMessage *message in _messageQueue) { - [self processSignalingMessage:message]; - } - [_messageQueue removeAllObjects]; + if (!_peerConnection || !_hasReceivedSdp) { + return; + } + for (ARDSignalingMessage *message in _messageQueue) { + [self processSignalingMessage:message]; + } + [_messageQueue removeAllObjects]; } - (void)processSignalingMessage:(ARDSignalingMessage *)message { - NSParameterAssert(_peerConnection || - message.type == kARDSignalingMessageTypeBye); - switch (message.type) { - case kARDSignalingMessageTypeOffer: - case kARDSignalingMessageTypeAnswer: { - ARDSessionDescriptionMessage *sdpMessage = - (ARDSessionDescriptionMessage *)message; - RTCSessionDescription *description = sdpMessage.sessionDescription; - [_peerConnection setRemoteDescriptionWithDelegate:self - sessionDescription:description]; - break; - } - case kARDSignalingMessageTypeCandidate: { - ARDICECandidateMessage *candidateMessage = - (ARDICECandidateMessage *)message; - [_peerConnection addICECandidate:candidateMessage.candidate]; - break; + NSParameterAssert(_peerConnection || + message.type == kARDSignalingMessageTypeBye); + switch (message.type) { + case kARDSignalingMessageTypeOffer: + case kARDSignalingMessageTypeAnswer: { + ARDSessionDescriptionMessage *sdpMessage = + (ARDSessionDescriptionMessage *)message; + RTCSessionDescription *description = sdpMessage.sessionDescription; + [_peerConnection setRemoteDescriptionWithDelegate:self + sessionDescription:description]; + break; + } + case kARDSignalingMessageTypeCandidate: { + ARDICECandidateMessage *candidateMessage = + (ARDICECandidateMessage *)message; + [_peerConnection addICECandidate:candidateMessage.candidate]; + break; + } + case kARDSignalingMessageTypeBye: + // Other client disconnected. + // TODO(tkchin): support waiting in room for next client. For now just + // disconnect. + [self disconnect]; + break; } - case kARDSignalingMessageTypeBye: - // Other client disconnected. - // TODO(tkchin): support waiting in room for next client. For now just - // disconnect. - [self disconnect]; - break; - } } - (void)sendSignalingMessage:(ARDSignalingMessage *)message { - if (_isInitiator) { - [self sendSignalingMessageToRoomServer:message completionHandler:nil]; - } else { - [self sendSignalingMessageToCollider:message]; - } + if (_isInitiator) { + [self sendSignalingMessageToRoomServer:message completionHandler:nil]; + } else { + [self sendSignalingMessageToCollider:message]; + } } @@ -509,10 +499,10 @@ - (RTCVideoTrack *)createLocalVideoTrack { // trying to open a local stream. // TODO(tkchin): local video capture for OSX. See // https://code.google.com/p/webrtc/issues/detail?id=3417. - + RTCVideoTrack *localVideoTrack = nil; #if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE - + NSString *cameraID = nil; for (AVCaptureDevice *captureDevice in [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]) { @@ -533,7 +523,7 @@ - (RTCVideoTrack *)createLocalVideoTrack { - (RTCMediaStream *)createLocalMediaStream { RTCMediaStream* localStream = [_factory mediaStreamWithLabel:@"ARDAMS"]; - + RTCVideoTrack *localVideoTrack = [self createLocalVideoTrack]; if (localVideoTrack) { [localStream addVideoTrack:localVideoTrack]; @@ -546,117 +536,117 @@ - (RTCMediaStream *)createLocalMediaStream { } - (void)requestTURNServersWithURL:(NSURL *)requestURL - completionHandler:(void (^)(NSArray *turnServers))completionHandler { - NSParameterAssert([requestURL absoluteString].length); - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:requestURL]; - // We need to set origin because TURN provider whitelists requests based on - // origin. - [request addValue:@"Mozilla/5.0" forHTTPHeaderField:@"user-agent"]; - [request addValue:self.serverHostUrl forHTTPHeaderField:@"origin"]; - [NSURLConnection sendAsyncRequest:request - completionHandler:^(NSURLResponse *response, - NSData *data, - NSError *error) { - NSArray *turnServers = [NSArray array]; - if (error) { - NSLog(@"Unable to get TURN server."); - completionHandler(turnServers); - return; - } - NSDictionary *dict = [NSDictionary dictionaryWithJSONData:data]; - turnServers = [RTCICEServer serversFromCEODJSONDictionary:dict]; - completionHandler(turnServers); - }]; + completionHandler:(void (^)(NSArray *turnServers))completionHandler { + NSParameterAssert([requestURL absoluteString].length); + NSMutableURLRequest *request = + [NSMutableURLRequest requestWithURL:requestURL]; + // We need to set origin because TURN provider whitelists requests based on + // origin. + [request addValue:@"Mozilla/5.0" forHTTPHeaderField:@"user-agent"]; + [request addValue:self.serverHostUrl forHTTPHeaderField:@"origin"]; + [NSURLConnection sendAsyncRequest:request + completionHandler:^(NSURLResponse *response, + NSData *data, + NSError *error) { + NSArray *turnServers = [NSArray array]; + if (error) { + NSLog(@"Unable to get TURN server."); + completionHandler(turnServers); + return; + } + NSDictionary *dict = [NSDictionary dictionaryWithJSONData:data]; + turnServers = [RTCICEServer serversFromCEODJSONDictionary:dict]; + completionHandler(turnServers); + }]; } #pragma mark - Room server methods - (void)registerWithRoomServerForRoomId:(NSString *)roomId - completionHandler:(void (^)(ARDRegisterResponse *))completionHandler { - NSString *urlString = - [NSString stringWithFormat:kARDRoomServerRegisterFormat, self.serverHostUrl, roomId]; - NSURL *roomURL = [NSURL URLWithString:urlString]; - NSLog(@"Registering with room server."); - __weak ARDAppClient *weakSelf = self; - [NSURLConnection sendAsyncPostToURL:roomURL - withData:nil - completionHandler:^(BOOL succeeded, NSData *data) { - ARDAppClient *strongSelf = weakSelf; - if (!succeeded) { - NSError *error = [self roomServerNetworkError]; - [strongSelf.delegate appClient:strongSelf didError:error]; - completionHandler(nil); - return; - } - ARDRegisterResponse *response = - [ARDRegisterResponse responseFromJSONData:data]; - completionHandler(response); - }]; + completionHandler:(void (^)(ARDRegisterResponse *))completionHandler { + NSString *urlString = + [NSString stringWithFormat:kARDRoomServerRegisterFormat, self.serverHostUrl, roomId]; + NSURL *roomURL = [NSURL URLWithString:urlString]; + NSLog(@"Registering with room server."); + __weak ARDAppClient *weakSelf = self; + [NSURLConnection sendAsyncPostToURL:roomURL + withData:nil + completionHandler:^(BOOL succeeded, NSData *data) { + ARDAppClient *strongSelf = weakSelf; + if (!succeeded) { + NSError *error = [self roomServerNetworkError]; + [strongSelf.delegate appClient:strongSelf didError:error]; + completionHandler(nil); + return; + } + ARDRegisterResponse *response = + [ARDRegisterResponse responseFromJSONData:data]; + completionHandler(response); + }]; } - (void)sendSignalingMessageToRoomServer:(ARDSignalingMessage *)message - completionHandler:(void (^)(ARDMessageResponse *))completionHandler { - NSData *data = [message JSONData]; - NSString *urlString = - [NSString stringWithFormat: - kARDRoomServerMessageFormat, self.serverHostUrl, _roomId, _clientId]; - NSURL *url = [NSURL URLWithString:urlString]; - NSLog(@"C->RS POST: %@", message); - __weak ARDAppClient *weakSelf = self; - [NSURLConnection sendAsyncPostToURL:url - withData:data - completionHandler:^(BOOL succeeded, NSData *data) { - ARDAppClient *strongSelf = weakSelf; - if (!succeeded) { - NSError *error = [self roomServerNetworkError]; - [strongSelf.delegate appClient:strongSelf didError:error]; - return; - } - ARDMessageResponse *response = - [ARDMessageResponse responseFromJSONData:data]; - NSError *error = nil; - switch (response.result) { - case kARDMessageResultTypeSuccess: - break; - case kARDMessageResultTypeUnknown: - error = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorUnknown - userInfo:@{ - NSLocalizedDescriptionKey: @"Unknown error.", - }]; - case kARDMessageResultTypeInvalidClient: - error = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorInvalidClient - userInfo:@{ - NSLocalizedDescriptionKey: @"Invalid client.", - }]; - break; - case kARDMessageResultTypeInvalidRoom: - error = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorInvalidRoom - userInfo:@{ - NSLocalizedDescriptionKey: @"Invalid room.", - }]; - break; - }; - if (error) { - [strongSelf.delegate appClient:strongSelf didError:error]; - } - if (completionHandler) { - completionHandler(response); - } - }]; + completionHandler:(void (^)(ARDMessageResponse *))completionHandler { + NSData *data = [message JSONData]; + NSString *urlString = + [NSString stringWithFormat: + kARDRoomServerMessageFormat, self.serverHostUrl, _roomId, _clientId]; + NSURL *url = [NSURL URLWithString:urlString]; + NSLog(@"C->RS POST: %@", message); + __weak ARDAppClient *weakSelf = self; + [NSURLConnection sendAsyncPostToURL:url + withData:data + completionHandler:^(BOOL succeeded, NSData *data) { + ARDAppClient *strongSelf = weakSelf; + if (!succeeded) { + NSError *error = [self roomServerNetworkError]; + [strongSelf.delegate appClient:strongSelf didError:error]; + return; + } + ARDMessageResponse *response = + [ARDMessageResponse responseFromJSONData:data]; + NSError *error = nil; + switch (response.result) { + case kARDMessageResultTypeSuccess: + break; + case kARDMessageResultTypeUnknown: + error = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorUnknown + userInfo:@{ + NSLocalizedDescriptionKey: @"Unknown error.", + }]; + case kARDMessageResultTypeInvalidClient: + error = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorInvalidClient + userInfo:@{ + NSLocalizedDescriptionKey: @"Invalid client.", + }]; + break; + case kARDMessageResultTypeInvalidRoom: + error = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorInvalidRoom + userInfo:@{ + NSLocalizedDescriptionKey: @"Invalid room.", + }]; + break; + }; + if (error) { + [strongSelf.delegate appClient:strongSelf didError:error]; + } + if (completionHandler) { + completionHandler(response); + } + }]; } - (void)unregisterWithRoomServer { - NSString *urlString = - [NSString stringWithFormat:kARDRoomServerByeFormat, self.serverHostUrl, _roomId, _clientId]; - NSURL *url = [NSURL URLWithString:urlString]; - NSLog(@"C->RS: BYE"); + NSString *urlString = + [NSString stringWithFormat:kARDRoomServerByeFormat, self.serverHostUrl, _roomId, _clientId]; + NSURL *url = [NSURL URLWithString:urlString]; + NSLog(@"C->RS: BYE"); //Make sure to do a POST [NSURLConnection sendAsyncPostToURL:url withData:nil completionHandler:^(BOOL succeeded, NSData *data) { if (succeeded) { @@ -668,76 +658,76 @@ - (void)unregisterWithRoomServer { } - (NSError *)roomServerNetworkError { - NSError *error = - [[NSError alloc] initWithDomain:kARDAppClientErrorDomain - code:kARDAppClientErrorNetwork - userInfo:@{ - NSLocalizedDescriptionKey: @"Room server network error", - }]; - return error; + NSError *error = + [[NSError alloc] initWithDomain:kARDAppClientErrorDomain + code:kARDAppClientErrorNetwork + userInfo:@{ + NSLocalizedDescriptionKey: @"Room server network error", + }]; + return error; } #pragma mark - Collider methods - (void)registerWithColliderIfReady { - if (!self.isRegisteredWithRoomServer) { - return; - } - // Open WebSocket connection. - _channel = - [[ARDWebSocketChannel alloc] initWithURL:_websocketURL - restURL:_websocketRestURL - delegate:self]; - [_channel registerForRoomId:_roomId clientId:_clientId]; + if (!self.isRegisteredWithRoomServer) { + return; + } + // Open WebSocket connection. + _channel = + [[ARDWebSocketChannel alloc] initWithURL:_websocketURL + restURL:_websocketRestURL + delegate:self]; + [_channel registerForRoomId:_roomId clientId:_clientId]; } - (void)sendSignalingMessageToCollider:(ARDSignalingMessage *)message { - NSData *data = [message JSONData]; - [_channel sendData:data]; + NSData *data = [message JSONData]; + [_channel sendData:data]; } #pragma mark - Defaults - (RTCMediaConstraints *)defaultMediaStreamConstraints { - RTCMediaConstraints* constraints = - [[RTCMediaConstraints alloc] - initWithMandatoryConstraints:nil - optionalConstraints:nil]; - return constraints; + RTCMediaConstraints* constraints = + [[RTCMediaConstraints alloc] + initWithMandatoryConstraints:nil + optionalConstraints:nil]; + return constraints; } - (RTCMediaConstraints *)defaultAnswerConstraints { - return [self defaultOfferConstraints]; + return [self defaultOfferConstraints]; } - (RTCMediaConstraints *)defaultOfferConstraints { - NSArray *mandatoryConstraints = @[ - [[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" value:@"true"], - [[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" value:@"true"] - ]; - RTCMediaConstraints* constraints = - [[RTCMediaConstraints alloc] - initWithMandatoryConstraints:mandatoryConstraints - optionalConstraints:nil]; - return constraints; + NSArray *mandatoryConstraints = @[ + [[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" value:@"true"], + [[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" value:@"true"] + ]; + RTCMediaConstraints* constraints = + [[RTCMediaConstraints alloc] + initWithMandatoryConstraints:mandatoryConstraints + optionalConstraints:nil]; + return constraints; } - (RTCMediaConstraints *)defaultPeerConnectionConstraints { - NSArray *optionalConstraints = @[ - [[RTCPair alloc] initWithKey:@"DtlsSrtpKeyAgreement" value:@"true"] - ]; - RTCMediaConstraints* constraints = - [[RTCMediaConstraints alloc] - initWithMandatoryConstraints:nil - optionalConstraints:optionalConstraints]; - return constraints; + NSArray *optionalConstraints = @[ + [[RTCPair alloc] initWithKey:@"DtlsSrtpKeyAgreement" value:@"true"] + ]; + RTCMediaConstraints* constraints = + [[RTCMediaConstraints alloc] + initWithMandatoryConstraints:nil + optionalConstraints:optionalConstraints]; + return constraints; } - (RTCICEServer *)defaultSTUNServer { - NSURL *defaultSTUNServerURL = [NSURL URLWithString:kARDDefaultSTUNServerUrl]; - return [[RTCICEServer alloc] initWithURI:defaultSTUNServerURL - username:@"" - password:@""]; + NSURL *defaultSTUNServerURL = [NSURL URLWithString:kARDDefaultSTUNServerUrl]; + return [[RTCICEServer alloc] initWithURI:defaultSTUNServerURL + username:@"" + password:@""]; } #pragma mark - Audio mute/unmute @@ -802,7 +792,7 @@ - (void)swapCameraToFront{ [localStream removeVideoTrack:localStream.videoTracks[0]]; RTCVideoTrack *localVideoTrack = [self createLocalVideoTrack]; - + if (localVideoTrack) { [localStream addVideoTrack:localVideoTrack]; [_delegate appClient:self didReceiveLocalVideoTrack:localVideoTrack]; diff --git a/Lib/ARDSignalingMessage.m b/Lib/ARDSignalingMessage.m index 19b5e74..1d42827 100755 --- a/Lib/ARDSignalingMessage.m +++ b/Lib/ARDSignalingMessage.m @@ -147,15 +147,12 @@ - (NSData *)JSONData { @implementation ARDCustomMessage -- (instancetype)init { - return [super initWithType:kARDSignalingMessageTypeCustomMessage]; -} - - (instancetype)initWithTagAndData:(NSString *)tag data:(NSDictionary *)data { self.tag = tag; self.data = data; + return [super initWithType:kARDSignalingMessageTypeCustomMessage]; } - (NSData *)JSONData { From c2d88805d492892f904d252e85eb1af74c03d3a2 Mon Sep 17 00:00:00 2001 From: BenjaminFaal Date: Wed, 15 Jun 2016 13:28:58 +0200 Subject: [PATCH 7/9] Update ARDAppClient.m --- Lib/ARDAppClient.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 37f1ad0..4dad6b4 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -166,7 +166,7 @@ - (void)setState:(ARDAppClientState)state { } - (void)sendData:(NSString *)tag - data:(NSDictionary *)data { + data:(NSDictionary *)data { ARDCustomMessage *customMessage = [[ARDCustomMessage alloc] initWithTagAndData:tag data:data]; NSData *customData = [customMessage JSONData]; [_channel sendData:customData]; From a6506776bd87a98416d682f0649954afea6d3046 Mon Sep 17 00:00:00 2001 From: BenjaminFaal Date: Wed, 15 Jun 2016 13:45:08 +0200 Subject: [PATCH 8/9] Update ARDAppClient.m --- Lib/ARDAppClient.m | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 4dad6b4..00f4f17 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -263,10 +263,7 @@ - (void)channel:(ARDWebSocketChannel *)channel switch (message.type) { case kARDSignalingMessageTypeCustomMessage: { - NSLog(@"INCOMING CUSTOM MSG:"); - NSLog(message); - NSError * err; - NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NSJSONReadingMutableContainers error:&err]; + NSDictionary * json = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:message.JSONData options:NULL error:NULL]; [_messageReceiver didReceiveMessage:json[@"tag"] data:json[@"data"]]; } From e7c62247b5b99148b63532c1fb75376baa33368e Mon Sep 17 00:00:00 2001 From: Benjamin Date: Wed, 29 Jun 2016 13:10:17 +0200 Subject: [PATCH 9/9] changed RTCMessageReceiver to protocol and updated sample code --- AppRTC/ARTCVideoChatViewController.h | 2 +- AppRTC/ARTCVideoChatViewController.m | 6 +++++- Lib/ARDAppClient.h | 4 ++-- Lib/ARDAppClient.m | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/AppRTC/ARTCVideoChatViewController.h b/AppRTC/ARTCVideoChatViewController.h index df366e2..da62c29 100644 --- a/AppRTC/ARTCVideoChatViewController.h +++ b/AppRTC/ARTCVideoChatViewController.h @@ -10,7 +10,7 @@ #import #import -@interface ARTCVideoChatViewController : UIViewController +@interface ARTCVideoChatViewController : UIViewController //Views, Labels, and Buttons @property (strong, nonatomic) IBOutlet RTCEAGLVideoView *remoteView; diff --git a/AppRTC/ARTCVideoChatViewController.m b/AppRTC/ARTCVideoChatViewController.m index 0c2d68a..50e846b 100644 --- a/AppRTC/ARTCVideoChatViewController.m +++ b/AppRTC/ARTCVideoChatViewController.m @@ -63,11 +63,15 @@ - (void)viewWillAppear:(BOOL)animated { [self disconnect]; self.client = [[ARDAppClient alloc] initWithDelegate:self]; [self.client setServerHostUrl:SERVER_HOST_URL]; - [self.client connectToRoomWithId:self.roomName options:nil]; + [self.client connectToRoomWithId:self.roomName options:nil messageReceiver:self]; [self.urlLabel setText:self.roomUrl]; } +- (void)didReceiveMessage:(NSString *)tag data:(NSDictionary *)data { + NSLog([NSString stringWithFormat:@"INCOMING MESSGAE WITH tag: %@/ AND data: %@/", tag, data]); +} + - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil]; diff --git a/Lib/ARDAppClient.h b/Lib/ARDAppClient.h index 1fce863..d6fb40e 100755 --- a/Lib/ARDAppClient.h +++ b/Lib/ARDAppClient.h @@ -29,7 +29,7 @@ #import "RTCVideoTrack.h" -@interface RTCMessageReceiver : NSObject +@protocol RTCMessageReceiver - (void)didReceiveMessage:(NSString *)tag data:(NSDictionary *)data; @@ -77,7 +77,7 @@ didReceiveRemoteVideoTrack:(RTCVideoTrack *)remoteVideoTrack; // and so on. - (void)connectToRoomWithId:(NSString *)roomId options:(NSDictionary *)options - messageReceiver:(RTCMessageReceiver *)messageReceiver; + messageReceiver:(id)messageReceiver; - (void)sendData:(NSString *)tag data:(NSDictionary *)data; diff --git a/Lib/ARDAppClient.m b/Lib/ARDAppClient.m index 00f4f17..1b73857 100755 --- a/Lib/ARDAppClient.m +++ b/Lib/ARDAppClient.m @@ -94,7 +94,7 @@ @interface ARDAppClient () messageReceiver; @end @@ -174,7 +174,7 @@ - (void)sendData:(NSString *)tag - (void)connectToRoomWithId:(NSString *)roomId options:(NSDictionary *)options - messageReceiver:(RTCMessageReceiver *)messageReceiver { + messageReceiver:(id)messageReceiver { NSParameterAssert(roomId.length); NSParameterAssert(_state == kARDAppClientStateDisconnected); self.state = kARDAppClientStateConnecting;