Эх сурвалжийг харах

Added asyncResponse2 mode

Pierre-Olivier Latour 10 жил өмнө
parent
commit
3618dcac7e
1 өөрчлөгдсөн 35 нэмэгдсэн , 2 устгасан
  1. 35 2
      Mac/main.m

+ 35 - 2
Mac/main.m

@@ -52,7 +52,8 @@ typedef enum {
   kMode_WebDAV,
   kMode_WebUploader,
   kMode_StreamingResponse,
-  kMode_AsyncResponse
+  kMode_AsyncResponse,
+  kMode_AsyncResponse2
 } Mode;
 
 @interface Delegate : NSObject <GCDWebServerDelegate, GCDWebDAVServerDelegate, GCDWebUploaderDelegate>
@@ -144,7 +145,7 @@ int main(int argc, const char* argv[]) {
     BOOL bindToLocalhost = NO;
     
     if (argc == 1) {
-      fprintf(stdout, "Usage: %s [-mode webServer | htmlPage | htmlForm | htmlFileUpload | webDAV | webUploader | streamingResponse | asyncResponse] [-record] [-root directory] [-tests directory] [-authenticationMethod Basic | Digest] [-authenticationRealm realm] [-authenticationUser user] [-authenticationPassword password] [--localhost]\n\n", basename((char*)argv[0]));
+      fprintf(stdout, "Usage: %s [-mode webServer | htmlPage | htmlForm | htmlFileUpload | webDAV | webUploader | streamingResponse | asyncResponse | asyncResponse2] [-record] [-root directory] [-tests directory] [-authenticationMethod Basic | Digest] [-authenticationRealm realm] [-authenticationUser user] [-authenticationPassword password] [--localhost]\n\n", basename((char*)argv[0]));
     } else {
       for (int i = 1; i < argc; ++i) {
         if (argv[i][0] != '-') {
@@ -168,6 +169,8 @@ int main(int argc, const char* argv[]) {
             mode = kMode_StreamingResponse;
           } else if (!strcmp(argv[i], "asyncResponse")) {
             mode = kMode_AsyncResponse;
+          } else if (!strcmp(argv[i], "asyncResponse2")) {
+            mode = kMode_AsyncResponse2;
           }
         } else if (!strcmp(argv[i], "-record")) {
           recording = YES;
@@ -370,6 +373,36 @@ int main(int argc, const char* argv[]) {
         break;
       }
       
+      // Test async responses 2
+      case kMode_AsyncResponse2: {
+        fprintf(stdout, "Running in Async Response 2 mode");
+        webServer = [[GCDWebServer alloc] init];
+        [webServer addHandlerForMethod:@"GET"
+                                  path:@"/"
+                          requestClass:[GCDWebServerRequest class]
+                     asyncProcessBlock:^(GCDWebServerRequest* request, GCDWebServerCompletionBlock handlerCompletionBlock) {
+          
+          dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+            
+            __block int countDown = 10;
+            GCDWebServerStreamedResponse* response = [GCDWebServerStreamedResponse responseWithContentType:@"text/plain" asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock readerCompletionBlock) {
+              
+              dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                
+                NSData* data = countDown ? [[NSString stringWithFormat:@"%i\n", countDown--] dataUsingEncoding:NSUTF8StringEncoding] : [NSData data];
+                readerCompletionBlock(data, nil);
+                
+              });
+              
+            }];
+            handlerCompletionBlock(response);
+            
+          });
+          
+        }];
+        break;
+      }
+      
     }
     
     if (webServer) {