Skip to content

Commit b578279

Browse files
authored
Merge pull request #13 from harryeakins/master
Use async request response API of GCDWebserver
2 parents bd234f5 + acf7dd0 commit b578279

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

ios/RCTHttpServer.m

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
@interface RCTHttpServer : NSObject <RCTBridgeModule> {
1313
WGCDWebServer* _webServer;
14-
NSMutableDictionary* _requestResponses;
14+
NSMutableDictionary* _completionBlocks;
1515
}
1616
@end
1717

@@ -25,13 +25,18 @@ @implementation RCTHttpServer
2525

2626

2727
- (void)initResponseReceivedFor:(WGCDWebServer *)server forType:(NSString*)type {
28-
[server addDefaultHandlerForMethod:type requestClass:[WGCDWebServerDataRequest class] processBlock:^WGCDWebServerResponse *(WGCDWebServerRequest* request) {
28+
[server addDefaultHandlerForMethod:type
29+
requestClass:[WGCDWebServerDataRequest class]
30+
asyncProcessBlock:^(WGCDWebServerRequest* request, WGCDWebServerCompletionBlock completionBlock) {
2931

3032
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
3133
int r = arc4random_uniform(1000000);
3234
NSString *requestId = [NSString stringWithFormat:@"%lld:%d", milliseconds, r];
3335

34-
// it's a weird way of doing it, fix it
36+
@synchronized (self) {
37+
[_completionBlocks setObject:completionBlock forKey:requestId];
38+
}
39+
3540
@try {
3641
if ([WGCDWebServerTruncateHeaderValue(request.contentType) isEqualToString:@"application/json"]) {
3742
WGCDWebServerDataRequest* dataRequest = (WGCDWebServerDataRequest*)request;
@@ -52,14 +57,6 @@ - (void)initResponseReceivedFor:(WGCDWebServer *)server forType:(NSString*)type
5257
@"type": type,
5358
@"url": request.URL.relativeString}];
5459
}
55-
56-
while ([_requestResponses objectForKey:requestId] == NULL) {
57-
[NSThread sleepForTimeInterval:0.01f];
58-
}
59-
60-
WGCDWebServerDataResponse* response = [_requestResponses objectForKey:requestId];
61-
[_requestResponses removeObjectForKey:requestId];
62-
return response;
6360
}];
6461
}
6562

@@ -100,8 +97,14 @@ - (void)initResponseReceivedFor:(WGCDWebServer *)server forType:(NSString*)type
10097
NSData* data = [body dataUsingEncoding:NSUTF8StringEncoding];
10198
WGCDWebServerDataResponse* requestResponse = [[WGCDWebServerDataResponse alloc] initWithData:data contentType:type];
10299
requestResponse.statusCode = code;
103-
104-
[_requestResponses setObject:requestResponse forKey:requestId];
100+
101+
WGCDWebServerCompletionBlock completionBlock = nil;
102+
@synchronized (self) {
103+
completionBlock = [_completionBlocks objectForKey:requestId];
104+
[_completionBlocks removeObjectForKey:requestId];
105+
}
106+
107+
completionBlock(requestResponse);
105108
}
106109

107110
@end

0 commit comments

Comments
 (0)