OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #import "ARDAppEngineClient.h" | |
12 | |
13 #import "WebRTC/RTCLogging.h" | |
14 | |
15 #import "ARDJoinResponse.h" | |
16 #import "ARDMessageResponse.h" | |
17 #import "ARDSignalingMessage.h" | |
18 #import "ARDUtilities.h" | |
19 | |
20 // TODO(tkchin): move these to a configuration object. | |
21 static NSString * const kARDRoomServerHostUrl = | |
22 @"https://appr.tc"; | |
23 static NSString * const kARDRoomServerJoinFormat = | |
24 @"https://appr.tc/join/%@"; | |
25 static NSString * const kARDRoomServerJoinFormatLoopback = | |
26 @"https://appr.tc/join/%@?debug=loopback"; | |
27 static NSString * const kARDRoomServerMessageFormat = | |
28 @"https://appr.tc/message/%@/%@"; | |
29 static NSString * const kARDRoomServerLeaveFormat = | |
30 @"https://appr.tc/leave/%@/%@"; | |
31 | |
32 static NSString * const kARDAppEngineClientErrorDomain = @"ARDAppEngineClient"; | |
33 static NSInteger const kARDAppEngineClientErrorBadResponse = -1; | |
34 | |
35 @implementation ARDAppEngineClient | |
36 | |
37 #pragma mark - ARDRoomServerClient | |
38 | |
39 - (void)joinRoomWithRoomId:(NSString *)roomId | |
40 isLoopback:(BOOL)isLoopback | |
41 completionHandler:(void (^)(ARDJoinResponse *response, | |
42 NSError *error))completionHandler { | |
43 NSParameterAssert(roomId.length); | |
44 | |
45 NSString *urlString = nil; | |
46 if (isLoopback) { | |
47 urlString = | |
48 [NSString stringWithFormat:kARDRoomServerJoinFormatLoopback, roomId]; | |
49 } else { | |
50 urlString = | |
51 [NSString stringWithFormat:kARDRoomServerJoinFormat, roomId]; | |
52 } | |
53 | |
54 NSURL *roomURL = [NSURL URLWithString:urlString]; | |
55 RTCLog(@"Joining room:%@ on room server.", roomId); | |
56 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:roomURL]; | |
57 request.HTTPMethod = @"POST"; | |
58 __weak ARDAppEngineClient *weakSelf = self; | |
59 [NSURLConnection sendAsyncRequest:request | |
60 completionHandler:^(NSURLResponse *response, | |
61 NSData *data, | |
62 NSError *error) { | |
63 ARDAppEngineClient *strongSelf = weakSelf; | |
64 if (error) { | |
65 if (completionHandler) { | |
66 completionHandler(nil, error); | |
67 } | |
68 return; | |
69 } | |
70 ARDJoinResponse *joinResponse = | |
71 [ARDJoinResponse responseFromJSONData:data]; | |
72 if (!joinResponse) { | |
73 if (completionHandler) { | |
74 NSError *error = [[self class] badResponseError]; | |
75 completionHandler(nil, error); | |
76 } | |
77 return; | |
78 } | |
79 if (completionHandler) { | |
80 completionHandler(joinResponse, nil); | |
81 } | |
82 }]; | |
83 } | |
84 | |
85 - (void)sendMessage:(ARDSignalingMessage *)message | |
86 forRoomId:(NSString *)roomId | |
87 clientId:(NSString *)clientId | |
88 completionHandler:(void (^)(ARDMessageResponse *response, | |
89 NSError *error))completionHandler { | |
90 NSParameterAssert(message); | |
91 NSParameterAssert(roomId.length); | |
92 NSParameterAssert(clientId.length); | |
93 | |
94 NSData *data = [message JSONData]; | |
95 NSString *urlString = | |
96 [NSString stringWithFormat: | |
97 kARDRoomServerMessageFormat, roomId, clientId]; | |
98 NSURL *url = [NSURL URLWithString:urlString]; | |
99 RTCLog(@"C->RS POST: %@", message); | |
100 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; | |
101 request.HTTPMethod = @"POST"; | |
102 request.HTTPBody = data; | |
103 __weak ARDAppEngineClient *weakSelf = self; | |
104 [NSURLConnection sendAsyncRequest:request | |
105 completionHandler:^(NSURLResponse *response, | |
106 NSData *data, | |
107 NSError *error) { | |
108 ARDAppEngineClient *strongSelf = weakSelf; | |
109 if (error) { | |
110 if (completionHandler) { | |
111 completionHandler(nil, error); | |
112 } | |
113 return; | |
114 } | |
115 ARDMessageResponse *messageResponse = | |
116 [ARDMessageResponse responseFromJSONData:data]; | |
117 if (!messageResponse) { | |
118 if (completionHandler) { | |
119 NSError *error = [[self class] badResponseError]; | |
120 completionHandler(nil, error); | |
121 } | |
122 return; | |
123 } | |
124 if (completionHandler) { | |
125 completionHandler(messageResponse, nil); | |
126 } | |
127 }]; | |
128 } | |
129 | |
130 - (void)leaveRoomWithRoomId:(NSString *)roomId | |
131 clientId:(NSString *)clientId | |
132 completionHandler:(void (^)(NSError *error))completionHandler { | |
133 NSParameterAssert(roomId.length); | |
134 NSParameterAssert(clientId.length); | |
135 | |
136 NSString *urlString = | |
137 [NSString stringWithFormat:kARDRoomServerLeaveFormat, roomId, clientId]; | |
138 NSURL *url = [NSURL URLWithString:urlString]; | |
139 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; | |
140 request.HTTPMethod = @"POST"; | |
141 NSURLResponse *response = nil; | |
142 NSError *error = nil; | |
143 // We want a synchronous request so that we know that we've left the room on | |
144 // room server before we do any further work. | |
145 RTCLog(@"C->RS: BYE"); | |
146 [NSURLConnection sendSynchronousRequest:request | |
147 returningResponse:&response | |
148 error:&error]; | |
149 if (error) { | |
150 RTCLogError(@"Error leaving room %@ on room server: %@", | |
151 roomId, error.localizedDescription); | |
152 if (completionHandler) { | |
153 completionHandler(error); | |
154 } | |
155 return; | |
156 } | |
157 RTCLog(@"Left room:%@ on room server.", roomId); | |
158 if (completionHandler) { | |
159 completionHandler(nil); | |
160 } | |
161 } | |
162 | |
163 #pragma mark - Private | |
164 | |
165 + (NSError *)badResponseError { | |
166 NSError *error = | |
167 [[NSError alloc] initWithDomain:kARDAppEngineClientErrorDomain | |
168 code:kARDAppEngineClientErrorBadResponse | |
169 userInfo:@{ | |
170 NSLocalizedDescriptionKey: @"Error parsing response.", | |
171 }]; | |
172 return error; | |
173 } | |
174 | |
175 @end | |
OLD | NEW |