server-session-serverstreaming.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // {{ method.name }} (Server Streaming)
  2. public class {{ .|session:protoFile,service,method }} : {{ .|service:protoFile,service }}Session {
  3. private var provider : {{ .|provider:protoFile,service }}
  4. /// Create a session.
  5. fileprivate init(handler:gRPC.Handler, provider: {{ .|provider:protoFile,service }}) {
  6. self.provider = provider
  7. super.init(handler:handler)
  8. }
  9. /// Send a message. Nonblocking.
  10. public func Send(_ response: {{ method|output }}) throws {
  11. try handler.sendResponse(message:response.serializeProtobuf()) {}
  12. }
  13. /// Run the session. Internal.
  14. fileprivate func run(queue:DispatchQueue) throws {
  15. try self.handler.receiveMessage(initialMetadata:initialMetadata) {(requestData) in
  16. if let requestData = requestData {
  17. do {
  18. let requestMessage = try {{ method|input }}(protobuf:requestData)
  19. // to keep providers from blocking the server thread,
  20. // we dispatch them to another queue.
  21. queue.async {
  22. do {
  23. try self.provider.{{ method.name|lowercase }}(request:requestMessage, session: self)
  24. try self.handler.sendStatus(statusCode:self.statusCode,
  25. statusMessage:self.statusMessage,
  26. trailingMetadata:self.trailingMetadata,
  27. completion:{})
  28. } catch (let error) {
  29. print("error: \(error)")
  30. }
  31. }
  32. } catch (let error) {
  33. print("error: \(error)")
  34. }
  35. }
  36. }
  37. }
  38. }