Skip to content

Commit

Permalink
Update command-line Client/Server examples to synchronize with NSCond…
Browse files Browse the repository at this point in the history
…ition variables.
  • Loading branch information
timburks committed Nov 13, 2016
1 parent 3a8d0d9 commit c3f35da
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 43 deletions.
23 changes: 16 additions & 7 deletions Packages/Client/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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")
79 changes: 43 additions & 36 deletions Packages/Server/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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()

0 comments on commit c3f35da

Please sign in to comment.