client-call-serverstreaming.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 requestData = try request.serializeProtobuf()
  11. let latch = CountDownLatch(1)
  12. try call.start(.serverStreaming,
  13. metadata:metadata,
  14. message:requestData)
  15. {callResult in
  16. latch.signal()
  17. }
  18. latch.wait()
  19. return self
  20. }
  21. // Call this to wait for a result. Blocks.
  22. public func receive() throws -> {{ method|output }} {
  23. var returnError : {{ .|clienterror:protoFile,service }}?
  24. var response : {{ method|output }}!
  25. let latch = CountDownLatch(1)
  26. do {
  27. try call.receiveMessage() {(responseData) in
  28. if let responseData = responseData {
  29. response = try? {{ method|output }}(protobuf:responseData)
  30. if response == nil {
  31. returnError = {{ .|clienterror:protoFile,service }}.invalidMessageReceived
  32. }
  33. } else {
  34. returnError = {{ .|clienterror:protoFile,service }}.endOfStream
  35. }
  36. latch.signal()
  37. }
  38. latch.wait()
  39. }
  40. if let returnError = returnError {
  41. throw returnError
  42. }
  43. return response
  44. }
  45. }