|
|
@@ -60,25 +60,29 @@ Group {
|
|
|
description: "Run an echo server.") { ssl, address, port in
|
|
|
let sem = DispatchSemaphore(value: 0)
|
|
|
let echoProvider = EchoProvider()
|
|
|
+ var echoServer: Echo_EchoServer?
|
|
|
if ssl {
|
|
|
print("starting secure server")
|
|
|
let certificateURL = URL(fileURLWithPath: "ssl.crt")
|
|
|
let keyURL = URL(fileURLWithPath: "ssl.key")
|
|
|
- if let echoServer = Echo_EchoServer(address: address + ":" + port,
|
|
|
- certificateURL: certificateURL,
|
|
|
- keyURL: keyURL,
|
|
|
- provider: echoProvider) {
|
|
|
- echoServer.start()
|
|
|
- }
|
|
|
+ echoServer = Echo_EchoServer(address: address + ":" + port,
|
|
|
+ certificateURL: certificateURL,
|
|
|
+ keyURL: keyURL,
|
|
|
+ provider: echoProvider)
|
|
|
+ echoServer?.start()
|
|
|
} else {
|
|
|
print("starting insecure server")
|
|
|
- let echoServer = Echo_EchoServer(address: address + ":" + port,
|
|
|
- provider: echoProvider)
|
|
|
- echoServer.start()
|
|
|
+ echoServer = Echo_EchoServer(address: address + ":" + port,
|
|
|
+ provider: echoProvider)
|
|
|
+ echoServer?.start()
|
|
|
}
|
|
|
// This blocks to keep the main thread from finishing while the server runs,
|
|
|
// but the server never exits. Kill the process to stop it.
|
|
|
_ = sem.wait(timeout: DispatchTime.distantFuture)
|
|
|
+ // This suppresses a "variable echoServer was written to, but never read" warning.
|
|
|
+ _ = echoServer
|
|
|
+ // And this ensures that echoServer doesn't get deallocated right after it is created.
|
|
|
+ echoServer = nil
|
|
|
}
|
|
|
|
|
|
$0.command("get", sslFlag, addressOption("localhost"), portOption, messageOption,
|
|
|
@@ -98,8 +102,9 @@ Group {
|
|
|
requestMessage.text = message
|
|
|
print("expand sending: " + requestMessage.text)
|
|
|
let sem = DispatchSemaphore(value: 0)
|
|
|
+ var callResult : CallResult?
|
|
|
let expandCall = try service.expand(requestMessage) { result in
|
|
|
- print("expand completed with result \(result)")
|
|
|
+ callResult = result
|
|
|
sem.signal()
|
|
|
}
|
|
|
var running = true
|
|
|
@@ -107,19 +112,23 @@ Group {
|
|
|
do {
|
|
|
let responseMessage = try expandCall.receive()
|
|
|
print("expand received: \(responseMessage.text)")
|
|
|
- } catch Echo_EchoClientError.endOfStream {
|
|
|
+ } catch ClientError.endOfStream {
|
|
|
running = false
|
|
|
}
|
|
|
}
|
|
|
_ = sem.wait(timeout: DispatchTime.distantFuture)
|
|
|
+ if let statusMessage = callResult?.statusMessage {
|
|
|
+ print("expand completed with result \(statusMessage)")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$0.command("collect", sslFlag, addressOption("localhost"), portOption, messageOption,
|
|
|
description: "Perform a client-streaming collect().") { ssl, address, port, message in
|
|
|
let service = buildEchoService(ssl, address, port, message)
|
|
|
let sem = DispatchSemaphore(value: 0)
|
|
|
+ var callResult : CallResult?
|
|
|
let collectCall = try service.collect { result in
|
|
|
- print("collect completed with result \(result)")
|
|
|
+ callResult = result
|
|
|
sem.signal()
|
|
|
}
|
|
|
let parts = message.components(separatedBy: " ")
|
|
|
@@ -128,19 +137,23 @@ Group {
|
|
|
requestMessage.text = part
|
|
|
print("collect sending: " + part)
|
|
|
try collectCall.send(requestMessage) { error in print(error) }
|
|
|
- sleep(1)
|
|
|
+ usleep(100000)
|
|
|
}
|
|
|
let responseMessage = try collectCall.closeAndReceive()
|
|
|
print("collect received: \(responseMessage.text)")
|
|
|
_ = sem.wait(timeout: DispatchTime.distantFuture)
|
|
|
+ if let statusMessage = callResult?.statusMessage {
|
|
|
+ print("collect completed with result \(statusMessage)")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$0.command("update", sslFlag, addressOption("localhost"), portOption, messageOption,
|
|
|
description: "Perform a bidirectional-streaming update().") { ssl, address, port, message in
|
|
|
let service = buildEchoService(ssl, address, port, message)
|
|
|
let sem = DispatchSemaphore(value: 0)
|
|
|
+ var callResult : CallResult?
|
|
|
let updateCall = try service.update { result in
|
|
|
- print("update completed with result \(result)")
|
|
|
+ callResult = result
|
|
|
sem.signal()
|
|
|
}
|
|
|
|
|
|
@@ -150,7 +163,7 @@ Group {
|
|
|
do {
|
|
|
let responseMessage = try updateCall.receive()
|
|
|
print("update received: \(responseMessage.text)")
|
|
|
- } catch Echo_EchoClientError.endOfStream {
|
|
|
+ } catch ClientError.endOfStream {
|
|
|
running = false
|
|
|
} catch (let error) {
|
|
|
print("error: \(error)")
|
|
|
@@ -163,10 +176,13 @@ Group {
|
|
|
requestMessage.text = part
|
|
|
print("update sending: " + requestMessage.text)
|
|
|
try updateCall.send(requestMessage) { error in print(error) }
|
|
|
- sleep(1)
|
|
|
+ usleep(100000)
|
|
|
}
|
|
|
try updateCall.closeSend()
|
|
|
_ = sem.wait(timeout: DispatchTime.distantFuture)
|
|
|
+ if let statusMessage = callResult?.statusMessage {
|
|
|
+ print("update completed with result \(statusMessage)")
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}.run()
|