server.pb.swift 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /*
  2. * DO NOT EDIT.
  3. *
  4. * Generated by the protocol buffer compiler.
  5. * Source: {{ file|fileDescriptorName }}
  6. *
  7. */
  8. /*
  9. * Copyright 2017, gRPC Authors All rights reserved.
  10. *
  11. * Licensed under the Apache License, Version 2.0 (the "License");
  12. * you may not use this file except in compliance with the License.
  13. * You may obtain a copy of the License at
  14. *
  15. * http://www.apache.org/licenses/LICENSE-2.0
  16. *
  17. * Unless required by applicable law or agreed to in writing, software
  18. * distributed under the License is distributed on an "AS IS" BASIS,
  19. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  20. * See the License for the specific language governing permissions and
  21. * limitations under the License.
  22. */
  23. import Foundation
  24. import Dispatch
  25. import gRPC
  26. import SwiftProtobuf
  27. //-{% for service in file.services %}
  28. /// Type for errors thrown from generated server code.
  29. {{ access }} enum {{ .|servererror:file,service }} : Error {
  30. case endOfStream
  31. }
  32. /// To build a server, implement a class that conforms to this protocol.
  33. {{ access }} protocol {{ .|provider:file,service }} {
  34. //-{% for method in service.methods %}
  35. //-{% if method|methodIsUnary %}
  36. func {{ method|methodDescriptorName|lowercase }}(request : {{ method|input }}, session : {{ .|session:file,service,method }}) throws -> {{ method|output }}
  37. //-{% endif %}
  38. //-{% if method|methodIsServerStreaming %}
  39. func {{ method|methodDescriptorName|lowercase }}(request : {{ method|input }}, session : {{ .|session:file,service,method }}) throws
  40. //-{% endif %}
  41. //-{% if method|methodIsClientStreaming %}
  42. func {{ method|methodDescriptorName|lowercase }}(session : {{ .|session:file,service,method }}) throws
  43. //-{% endif %}
  44. //-{% if method|methodIsBidiStreaming %}
  45. func {{ method|methodDescriptorName|lowercase }}(session : {{ .|session:file,service,method }}) throws
  46. //-{% endif %}
  47. //-{% endfor %}
  48. }
  49. /// Common properties available in each service session.
  50. {{ access }} class {{ .|service:file,service }}Session {
  51. fileprivate var handler : gRPC.Handler
  52. {{ access }} var requestMetadata : Metadata { return handler.requestMetadata }
  53. {{ access }} var statusCode : Int = 0
  54. {{ access }} var statusMessage : String = "OK"
  55. {{ access }} var initialMetadata : Metadata = Metadata()
  56. {{ access }} var trailingMetadata : Metadata = Metadata()
  57. fileprivate init(handler:gRPC.Handler) {
  58. self.handler = handler
  59. }
  60. }
  61. //-{% for method in service.methods %}
  62. //-{% if method|methodIsUnary %}
  63. //-{% include "server-session-unary.swift" %}
  64. //-{% endif %}
  65. //-{% if method|methodIsServerStreaming %}
  66. //-{% include "server-session-serverstreaming.swift" %}
  67. //-{% endif %}
  68. //-{% if method|methodIsClientStreaming %}
  69. //-{% include "server-session-clientstreaming.swift" %}
  70. //-{% endif %}
  71. //-{% if method|methodIsBidiStreaming %}
  72. //-{% include "server-session-bidistreaming.swift" %}
  73. //-{% endif %}
  74. //-{% endfor %}
  75. /// Main server for generated service
  76. {{ access }} class {{ .|server:file,service }} {
  77. private var address: String
  78. private var server: gRPC.Server
  79. private var provider: {{ .|provider:file,service }}?
  80. /// Create a server that accepts insecure connections.
  81. {{ access }} init(address:String,
  82. provider:{{ .|provider:file,service }}) {
  83. gRPC.initialize()
  84. self.address = address
  85. self.provider = provider
  86. self.server = gRPC.Server(address:address)
  87. }
  88. /// Create a server that accepts secure connections.
  89. {{ access }} init?(address:String,
  90. certificateURL:URL,
  91. keyURL:URL,
  92. provider:{{ .|provider:file,service }}) {
  93. gRPC.initialize()
  94. self.address = address
  95. self.provider = provider
  96. guard
  97. let certificate = try? String(contentsOf: certificateURL, encoding: .utf8),
  98. let key = try? String(contentsOf: keyURL, encoding: .utf8)
  99. else {
  100. return nil
  101. }
  102. self.server = gRPC.Server(address:address, key:key, certs:certificate)
  103. }
  104. /// Start the server.
  105. {{ access }} func start(queue:DispatchQueue = DispatchQueue.global()) {
  106. guard let provider = self.provider else {
  107. fatalError() // the server requires a provider
  108. }
  109. server.run {(handler) in
  110. print("Server received request to " + handler.host
  111. + " calling " + handler.method
  112. + " from " + handler.caller
  113. + " with " + String(describing:handler.requestMetadata) )
  114. do {
  115. switch handler.method {
  116. //-{% for method in service.methods %}
  117. case "{{ .|path:file,service,method }}":
  118. try {{ .|session:file,service,method }}(handler:handler, provider:provider).run(queue:queue)
  119. //-{% endfor %}
  120. default:
  121. break // handle unknown requests
  122. }
  123. } catch (let error) {
  124. print("Server error: \(error)")
  125. }
  126. }
  127. }
  128. }
  129. //-{% endfor %}