client-call-unary.swift 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. //
  2. // {{ method.name }} (Unary)
  3. //
  4. public class {{ .|callname:protoFile,service,method }} {
  5. var call : Call
  6. fileprivate init(_ channel: Channel) {
  7. self.call = channel.makeCall("{{ .|callpath:protoFile,service,method }}")
  8. }
  9. fileprivate func run(request: {{ method|inputType }},
  10. metadata: Metadata) throws -> {{ method|outputType }} {
  11. let done = NSCondition()
  12. var callResult : CallResult!
  13. var responseMessage : {{ method|outputType }}?
  14. let requestMessageData = try! request.serializeProtobuf()
  15. try! call.perform(message: requestMessageData,
  16. metadata: metadata)
  17. {(_callResult) in
  18. callResult = _callResult
  19. if let messageData = callResult.resultData {
  20. responseMessage = try? {{ method|outputType }}(protobuf:messageData)
  21. }
  22. done.lock()
  23. done.signal()
  24. done.unlock()
  25. }
  26. done.lock()
  27. done.wait()
  28. done.unlock()
  29. if let responseMessage = responseMessage {
  30. return responseMessage
  31. } else {
  32. throw {{ .|errorname:protoFile,service }}.error(c: callResult)
  33. }
  34. }
  35. }