client-call-serverstreaming.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // {{ method.name }} (Server Streaming)
  2. public class {{ .|call:protoFile,service,method }} {
  3. private var call : Call
  4. /// Create a call.
  5. fileprivate init(_ channel: Channel) {
  6. self.call = channel.makeCall("{{ .|path:protoFile,service,method }}")
  7. }
  8. // Call this once with the message to send.
  9. fileprivate func run(request: {{ method|input }}, metadata: Metadata) throws -> {{ .|call:protoFile,service,method }} {
  10. let requestMessageData = try request.serializeProtobuf()
  11. try call.startServerStreaming(message: requestMessageData,
  12. metadata: metadata)
  13. {_ in}
  14. return self
  15. }
  16. // Call this to wait for a result. Blocks.
  17. public func Receive() throws -> {{ method|output }} {
  18. var returnError : {{ .|clienterror:protoFile,service }}?
  19. var returnMessage : {{ method|output }}!
  20. let done = NSCondition()
  21. do {
  22. try call.receiveMessage() {(data) in
  23. if let data = data {
  24. returnMessage = try? {{ method|output }}(protobuf:data)
  25. if returnMessage == nil {
  26. returnError = {{ .|clienterror:protoFile,service }}.invalidMessageReceived
  27. }
  28. } else {
  29. returnError = {{ .|clienterror:protoFile,service }}.endOfStream
  30. }
  31. done.lock()
  32. done.signal()
  33. done.unlock()
  34. }
  35. done.lock()
  36. done.wait()
  37. done.unlock()
  38. }
  39. if let returnError = returnError {
  40. throw returnError
  41. }
  42. return returnMessage
  43. }
  44. }