Skip to content

Commit c3f35da

Browse files
committed
Update command-line Client/Server examples to synchronize with NSCondition variables.
1 parent 3a8d0d9 commit c3f35da

File tree

2 files changed

+59
-43
lines changed

2 files changed

+59
-43
lines changed

Packages/Client/main.swift

+16-7
Original file line numberDiff line numberDiff line change
@@ -42,35 +42,44 @@ print("gRPC version", gRPC.version())
4242

4343
do {
4444
let c = gRPC.Channel(address:address)
45-
let steps = 30
45+
let steps = 3
4646
for i in 0..<steps {
47+
let done = NSCondition()
48+
4749
let method = (i < steps-1) ? "/hello" : "/quit"
50+
print("calling " + method)
4851
let call = c.makeCall(method)
4952

5053
let metadata = Metadata([["x": "xylophone"],
5154
["y": "yu"],
5255
["z": "zither"]])
5356

57+
5458
try! call.perform(message: message!, metadata:metadata) {
55-
(response) in
59+
(response) in
5660
print("status:", response.statusCode)
5761
print("statusMessage:", response.statusMessage!)
5862
if let resultData = response.resultData {
59-
print("message: \(resultData)")
63+
print("message: \(resultData)")
6064
}
61-
65+
6266
let initialMetadata = response.initialMetadata!
6367
for i in 0..<initialMetadata.count() {
6468
print("INITIAL METADATA ->", initialMetadata.key(index:i), ":", initialMetadata.value(index:i))
6569
}
66-
70+
6771
let trailingMetadata = response.trailingMetadata!
6872
for i in 0..<trailingMetadata.count() {
6973
print("TRAILING METADATA ->", trailingMetadata.key(index:i), ":", trailingMetadata.value(index:i))
7074
}
75+
done.lock()
76+
done.signal()
77+
done.unlock()
7178
}
79+
done.lock()
80+
done.wait()
81+
done.unlock()
7282
}
7383
}
74-
sleep(2)
75-
gRPC.shutdown()
84+
7685
print("Done")

Packages/Server/main.swift

+43-36
Original file line numberDiff line numberDiff line change
@@ -39,52 +39,59 @@ print("gRPC version", gRPC.version())
3939
let server = gRPC.Server(address:"localhost:8001")
4040
var requestCount = 0
4141

42+
let done = NSCondition()
43+
4244
server.run() {(requestHandler) in
4345

44-
do {
45-
requestCount += 1
46+
do {
47+
requestCount += 1
4648

47-
print("\(requestCount): Received request " + requestHandler.host
48-
+ " " + requestHandler.method
49-
+ " from " + requestHandler.caller)
49+
print("\(requestCount): Received request " + requestHandler.host
50+
+ " " + requestHandler.method
51+
+ " from " + requestHandler.caller)
5052

51-
let initialMetadata = requestHandler.requestMetadata
52-
for i in 0..<initialMetadata.count() {
53-
print("\(requestCount): Received initial metadata -> " + initialMetadata.key(index:i)
54-
+ ":" + initialMetadata.value(index:i))
55-
}
53+
let initialMetadata = requestHandler.requestMetadata
54+
for i in 0..<initialMetadata.count() {
55+
print("\(requestCount): Received initial metadata -> " + initialMetadata.key(index:i)
56+
+ ":" + initialMetadata.value(index:i))
57+
}
5658

57-
let initialMetadataToSend = Metadata([["a": "Apple"],
58-
["b": "Banana"],
59-
["c": "Cherry"]])
60-
try requestHandler.receiveMessage(initialMetadata:initialMetadataToSend)
61-
{(messageData) in
62-
let messageString = String(data: messageData!, encoding: .utf8)
63-
print("\(requestCount): Received message: " + messageString!)
64-
}
59+
let initialMetadataToSend = Metadata([["a": "Apple"],
60+
["b": "Banana"],
61+
["c": "Cherry"]])
62+
try requestHandler.receiveMessage(initialMetadata:initialMetadataToSend)
63+
{(messageData) in
64+
let messageString = String(data: messageData!, encoding: .utf8)
65+
print("\(requestCount): Received message: " + messageString!)
66+
}
6567

66-
if requestHandler.method == "/quit" {
68+
if requestHandler.method == "/quit" {
69+
print("quitting")
70+
done.lock()
71+
done.signal()
72+
done.unlock()
73+
}
6774

68-
}
75+
let replyMessage = "hello, client!"
76+
let trailingMetadataToSend = Metadata([["0": "zero"],
77+
["1": "one"],
78+
["2": "two"]])
79+
try requestHandler.sendResponse(message:replyMessage.data(using: .utf8)!,
80+
statusCode:0,
81+
statusMessage:"OK",
82+
trailingMetadata:trailingMetadataToSend)
6983

70-
let replyMessage = "hello, client!"
71-
let trailingMetadataToSend = Metadata([["0": "zero"],
72-
["1": "one"],
73-
["2": "two"]])
74-
try requestHandler.sendResponse(message:replyMessage.data(using: .utf8)!,
75-
statusCode:0,
76-
statusMessage:"OK",
77-
trailingMetadata:trailingMetadataToSend)
84+
print("------------------------------")
85+
} catch (let callError) {
86+
Swift.print("call error \(callError)")
87+
}
88+
}
7889

79-
print("------------------------------")
80-
} catch (let callError) {
81-
Swift.print("call error \(callError)")
82-
}
83-
}
84-
8590
server.onCompletion() {
86-
print("Server Stopped")
91+
print("Server Stopped")
8792
}
8893

89-
sleep(600)
94+
done.lock()
95+
done.wait()
96+
done.unlock()
9097

0 commit comments

Comments
 (0)