| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /// {{ method.name }} (Unary)
- public class {{ .|call:file,service,method }} {
- private var call : Call
- /// Create a call.
- fileprivate init(_ channel: Channel) {
- self.call = channel.makeCall("{{ .|path:file,service,method }}")
- }
- /// Run the call. Blocks until the reply is received.
- fileprivate func run(request: {{ method|input }},
- metadata: Metadata) throws -> {{ method|output }} {
- let sem = DispatchSemaphore(value: 0)
- var returnCallResult : CallResult!
- var returnResponse : {{ method|output }}?
- _ = try start(request:request, metadata:metadata) {response, callResult in
- returnResponse = response
- returnCallResult = callResult
- sem.signal()
- }
- _ = sem.wait(timeout: DispatchTime.distantFuture)
- if let returnResponse = returnResponse {
- return returnResponse
- } else {
- throw {{ .|clienterror:file,service }}.error(c: returnCallResult)
- }
- }
- /// Start the call. Nonblocking.
- fileprivate func start(request: {{ method|input }},
- metadata: Metadata,
- completion: @escaping ({{ method|output }}?, CallResult)->())
- throws -> {{ .|call:file,service,method }} {
- let requestData = try request.serializedData()
- try call.start(.unary,
- metadata:metadata,
- message:requestData)
- {(callResult) in
- if let responseData = callResult.resultData,
- let response = try? {{ method|output }}(serializedData:responseData) {
- completion(response, callResult)
- } else {
- completion(nil, callResult)
- }
- }
- return self
- }
- }
|