Index: webrtc/examples/objc/AppRTCDemo/ARDSignalingMessage.m |
diff --git a/webrtc/examples/objc/AppRTCDemo/ARDSignalingMessage.m b/webrtc/examples/objc/AppRTCDemo/ARDSignalingMessage.m |
index a5ca29576a0c0315194b00b938efc98e26d3be04..1a30fb37d777e53d371175f61ab5d5bfea582450 100644 |
--- a/webrtc/examples/objc/AppRTCDemo/ARDSignalingMessage.m |
+++ b/webrtc/examples/objc/AppRTCDemo/ARDSignalingMessage.m |
@@ -17,6 +17,7 @@ |
#import "RTCSessionDescription+JSON.h" |
static NSString const *kARDSignalingMessageTypeKey = @"type"; |
+static NSString const *kARDSignalingMessageCandidatesKey = @"candidates"; |
@implementation ARDSignalingMessage |
@@ -47,6 +48,18 @@ static NSString const *kARDSignalingMessageTypeKey = @"type"; |
RTCIceCandidate *candidate = |
[RTCIceCandidate candidateFromJSONDictionary:values]; |
message = [[ARDICECandidateMessage alloc] initWithCandidate:candidate]; |
+ } else if ([typeString isEqualToString:@"remove-candidates"]) { |
+ RTCLogInfo(@"Received remove-candidates message"); |
+ NSArray *jsonCandidates = values[kARDSignalingMessageCandidatesKey]; |
+ NSMutableArray<RTCIceCandidate *> *candidates = |
+ [NSMutableArray arrayWithCapacity:jsonCandidates.count]; |
+ for (NSDictionary *jsonCandidate in jsonCandidates) { |
+ RTCIceCandidate *candidate = |
+ [RTCIceCandidate candidateFromJSONDictionary:jsonCandidate]; |
+ [candidates addObject:candidate]; |
+ } |
+ message = [[ARDICECandidatesRemovalMessage alloc] |
+ initWithRemovedCandidates:candidates]; |
} else if ([typeString isEqualToString:@"offer"] || |
[typeString isEqualToString:@"answer"]) { |
RTCSessionDescription *description = |
@@ -84,6 +97,44 @@ static NSString const *kARDSignalingMessageTypeKey = @"type"; |
@end |
+@implementation ARDICECandidatesRemovalMessage |
+ |
+@synthesize candidates = _candidates; |
+ |
+- (instancetype)initWithRemovedCandidates:( |
+ NSArray<RTCIceCandidate *> *)candidates { |
+ NSParameterAssert(candidates.count); |
+ if (self = [super initWithType:kARDSignalingMessageTypeCandidatesRemoval]) { |
+ _candidates = candidates; |
+ } |
+ return self; |
+} |
+ |
+- (NSData *)JSONData { |
+ NSMutableArray *jsonCandidates = |
+ [NSMutableArray arrayWithCapacity:_candidates.count]; |
+ for (RTCIceCandidate *candidate in _candidates) { |
+ NSDictionary *jsonCandidate = [candidate JSONDictionary]; |
+ [jsonCandidates addObject:jsonCandidate]; |
+ } |
+ NSDictionary *json = @{ |
+ kARDSignalingMessageTypeKey : @"remove-candidates", |
+ kARDSignalingMessageCandidatesKey : jsonCandidates |
+ }; |
+ NSError *error = nil; |
+ NSData *data = |
+ [NSJSONSerialization dataWithJSONObject:json |
+ options:NSJSONWritingPrettyPrinted |
+ error:&error]; |
+ if (error) { |
+ RTCLogError(@"Error serializing JSON: %@", error); |
+ return nil; |
+ } |
+ return data; |
+} |
+ |
+@end |
+ |
@implementation ARDSessionDescriptionMessage |
@synthesize sessionDescription = _sessionDescription; |