Browse Source

Update command-line Client/Server examples to synchronize with NSCondition variables.

Tim Burks 9 years ago
parent
commit
c3f35da0cc
2 changed files with 59 additions and 43 deletions
  1. 16 7
      Packages/Client/main.swift
  2. 43 36
      Packages/Server/main.swift

+ 16 - 7
Packages/Client/main.swift

@@ -42,35 +42,44 @@ print("gRPC version", gRPC.version())
 
 do {
   let c = gRPC.Channel(address:address)
-  let steps = 30
+  let steps = 3
   for i in 0..<steps {
+    let done = NSCondition()
+
     let method = (i < steps-1) ? "/hello" : "/quit"
+    print("calling " + method)
     let call = c.makeCall(method)
 
     let metadata = Metadata([["x": "xylophone"],
                              ["y": "yu"],
                              ["z": "zither"]])
 
+
     try! call.perform(message: message!, metadata:metadata) {
-	(response) in
+      (response) in
       print("status:", response.statusCode)
       print("statusMessage:", response.statusMessage!)
       if let resultData = response.resultData {
-         print("message: \(resultData)")
+        print("message: \(resultData)")
       }
-  
+
       let initialMetadata = response.initialMetadata!
       for i in 0..<initialMetadata.count() {
         print("INITIAL METADATA ->", initialMetadata.key(index:i), ":", initialMetadata.value(index:i))
       }
-  
+
       let trailingMetadata = response.trailingMetadata!
       for i in 0..<trailingMetadata.count() {
         print("TRAILING METADATA ->", trailingMetadata.key(index:i), ":", trailingMetadata.value(index:i))
       }
+      done.lock()
+      done.signal()
+      done.unlock()
     }
+    done.lock()
+    done.wait()
+    done.unlock()
   }
 }
-sleep(2)
-gRPC.shutdown()
+
 print("Done")

+ 43 - 36
Packages/Server/main.swift

@@ -39,52 +39,59 @@ print("gRPC version", gRPC.version())
 let server = gRPC.Server(address:"localhost:8001")
 var requestCount = 0
 
+let done = NSCondition()
+
 server.run() {(requestHandler) in
 
-      do {
-        requestCount += 1
+  do {
+    requestCount += 1
 
-        print("\(requestCount): Received request " + requestHandler.host
-          + " " + requestHandler.method
-          + " from " + requestHandler.caller)
+    print("\(requestCount): Received request " + requestHandler.host
+      + " " + requestHandler.method
+      + " from " + requestHandler.caller)
 
-        let initialMetadata = requestHandler.requestMetadata
-        for i in 0..<initialMetadata.count() {
-          print("\(requestCount): Received initial metadata -> " + initialMetadata.key(index:i)
-            + ":" + initialMetadata.value(index:i))
-        }
+    let initialMetadata = requestHandler.requestMetadata
+    for i in 0..<initialMetadata.count() {
+      print("\(requestCount): Received initial metadata -> " + initialMetadata.key(index:i)
+        + ":" + initialMetadata.value(index:i))
+    }
 
-        let initialMetadataToSend = Metadata([["a": "Apple"],
-                                              ["b": "Banana"],
-                                              ["c": "Cherry"]])
-        try requestHandler.receiveMessage(initialMetadata:initialMetadataToSend)
-        {(messageData) in
-          let messageString = String(data: messageData!, encoding: .utf8)
-          print("\(requestCount): Received message: " + messageString!)
-        }
+    let initialMetadataToSend = Metadata([["a": "Apple"],
+                                          ["b": "Banana"],
+                                          ["c": "Cherry"]])
+    try requestHandler.receiveMessage(initialMetadata:initialMetadataToSend)
+    {(messageData) in
+      let messageString = String(data: messageData!, encoding: .utf8)
+      print("\(requestCount): Received message: " + messageString!)
+    }
 
-        if requestHandler.method == "/quit" {
+    if requestHandler.method == "/quit" {
+      print("quitting")
+      done.lock()
+      done.signal()
+      done.unlock()
+    }
 
-        }
+    let replyMessage = "hello, client!"
+    let trailingMetadataToSend = Metadata([["0": "zero"],
+                                           ["1": "one"],
+                                           ["2": "two"]])
+    try requestHandler.sendResponse(message:replyMessage.data(using: .utf8)!,
+                                    statusCode:0,
+                                    statusMessage:"OK",
+                                    trailingMetadata:trailingMetadataToSend)
 
-        let replyMessage = "hello, client!"
-        let trailingMetadataToSend = Metadata([["0": "zero"],
-                                               ["1": "one"],
-                                               ["2": "two"]])
-        try requestHandler.sendResponse(message:replyMessage.data(using: .utf8)!,
-                                        statusCode:0,
-                                        statusMessage:"OK",
-                                        trailingMetadata:trailingMetadataToSend)
+    print("------------------------------")
+  } catch (let callError) {
+    Swift.print("call error \(callError)")
+  }
+}
 
-        print("------------------------------")
-      } catch (let callError) {
-        Swift.print("call error \(callError)")
-      }
-    }
-    
 server.onCompletion() {
-    print("Server Stopped")
+  print("Server Stopped")
 }
 
-sleep(600)
+done.lock()
+done.wait()
+done.unlock()