|
|
@@ -42,193 +42,42 @@
|
|
|
import Foundation
|
|
|
import gRPC
|
|
|
|
|
|
-public enum Echo_EchoServerError : Error {
|
|
|
+//-{% for service in protoFile.service %}
|
|
|
+public enum {{ .|servererrorname:protoFile,service }} : Error {
|
|
|
case endOfStream
|
|
|
}
|
|
|
|
|
|
public protocol Echo_EchoProvider {
|
|
|
- func get(request : Echo_EchoRequest) throws -> Echo_EchoResponse
|
|
|
- func collect(session : Echo_EchoCollectSession) throws
|
|
|
- func expand(request : Echo_EchoRequest, session : Echo_EchoExpandSession) throws
|
|
|
- func update(session : Echo_EchoUpdateSession) throws
|
|
|
+ //-{% for method in service.method %}
|
|
|
+ //-{% if not method.clientStreaming and not method.serverStreaming %}
|
|
|
+ func {{ method.name|lowercase }}(request : {{ method|inputType }}) throws -> {{ method|outputType }}
|
|
|
+ //-{% endif %}
|
|
|
+ //-{% if not method.clientStreaming and method.serverStreaming %}
|
|
|
+ func {{ method.name|lowercase }}(request : {{ method|inputType }}, session : {{ .|sessionname:protoFile,service,method }}) throws
|
|
|
+ //-{% endif %}
|
|
|
+ //-{% if method.clientStreaming and not method.serverStreaming %}
|
|
|
+ func {{ method.name|lowercase }}(session : {{ .|sessionname:protoFile,service,method }}) throws
|
|
|
+ //-{% endif %}
|
|
|
+ //-{% if method.clientStreaming and method.serverStreaming %}
|
|
|
+ func {{ method.name|lowercase }}(session : {{ .|sessionname:protoFile,service,method }}) throws
|
|
|
+ //-{% endif %}
|
|
|
+ //-{% endfor %}
|
|
|
}
|
|
|
|
|
|
-// unary
|
|
|
-public class Echo_EchoGetSession {
|
|
|
- var handler : gRPC.Handler
|
|
|
- var provider : Echo_EchoProvider
|
|
|
-
|
|
|
- fileprivate init(handler:gRPC.Handler, provider: Echo_EchoProvider) {
|
|
|
- self.handler = handler
|
|
|
- self.provider = provider
|
|
|
- }
|
|
|
-
|
|
|
- fileprivate func run(queue:DispatchQueue) {
|
|
|
- do {
|
|
|
- try handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
|
|
|
- if let requestData = requestData {
|
|
|
- let requestMessage = try! Echo_EchoRequest(protobuf:requestData)
|
|
|
- let replyMessage = try! self.provider.get(request:requestMessage)
|
|
|
- try self.handler.sendResponse(message:replyMessage.serializeProtobuf(),
|
|
|
- statusCode: 0,
|
|
|
- statusMessage: "OK",
|
|
|
- trailingMetadata:Metadata())
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (let callError) {
|
|
|
- print("grpc error: \(callError)")
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// server streaming
|
|
|
-public class Echo_EchoExpandSession {
|
|
|
- var handler : gRPC.Handler
|
|
|
- var provider : Echo_EchoProvider
|
|
|
-
|
|
|
- fileprivate init(handler:gRPC.Handler, provider: Echo_EchoProvider) {
|
|
|
- self.handler = handler
|
|
|
- self.provider = provider
|
|
|
- }
|
|
|
-
|
|
|
- public func Send(_ response: Echo_EchoResponse) throws {
|
|
|
- try! handler.sendResponse(message:response.serializeProtobuf()) {}
|
|
|
- }
|
|
|
-
|
|
|
- fileprivate func run(queue:DispatchQueue) {
|
|
|
- do {
|
|
|
- try self.handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
|
|
|
- if let requestData = requestData {
|
|
|
- let requestMessage = try! Echo_EchoRequest(protobuf:requestData)
|
|
|
- // to keep providers from blocking the server thread,
|
|
|
- // we dispatch them to another queue.
|
|
|
- queue.async {
|
|
|
- try! self.provider.expand(request:requestMessage, session: self)
|
|
|
- try! self.handler.sendStatus(statusCode:0,
|
|
|
- statusMessage:"OK",
|
|
|
- trailingMetadata:Metadata(),
|
|
|
- completion:{})
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (let callError) {
|
|
|
- print("grpc error: \(callError)")
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// client streaming
|
|
|
-public class Echo_EchoCollectSession {
|
|
|
- var handler : gRPC.Handler
|
|
|
- var provider : Echo_EchoProvider
|
|
|
-
|
|
|
- fileprivate init(handler:gRPC.Handler, provider: Echo_EchoProvider) {
|
|
|
- self.handler = handler
|
|
|
- self.provider = provider
|
|
|
- }
|
|
|
-
|
|
|
- public func Receive() throws -> Echo_EchoRequest {
|
|
|
- let done = NSCondition()
|
|
|
- var requestMessage : Echo_EchoRequest?
|
|
|
- try self.handler.receiveMessage() {(requestData) in
|
|
|
- if let requestData = requestData {
|
|
|
- requestMessage = try! Echo_EchoRequest(protobuf:requestData)
|
|
|
- }
|
|
|
- done.lock()
|
|
|
- done.signal()
|
|
|
- done.unlock()
|
|
|
- }
|
|
|
- done.lock()
|
|
|
- done.wait()
|
|
|
- done.unlock()
|
|
|
- if requestMessage == nil {
|
|
|
- throw Echo_EchoServerError.endOfStream
|
|
|
- }
|
|
|
- return requestMessage!
|
|
|
- }
|
|
|
-
|
|
|
- public func SendAndClose(_ response: Echo_EchoResponse) throws {
|
|
|
- try! self.handler.sendResponse(message:response.serializeProtobuf(),
|
|
|
- statusCode: 0,
|
|
|
- statusMessage: "OK",
|
|
|
- trailingMetadata: Metadata())
|
|
|
- }
|
|
|
-
|
|
|
- fileprivate func run(queue:DispatchQueue) {
|
|
|
- do {
|
|
|
- print("EchoCollectSession run")
|
|
|
- try self.handler.sendMetadata(initialMetadata:Metadata()) {
|
|
|
- queue.async {
|
|
|
- try! self.provider.collect(session:self)
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (let callError) {
|
|
|
- print("grpc error: \(callError)")
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// fully streaming
|
|
|
-public class Echo_EchoUpdateSession {
|
|
|
- var handler : gRPC.Handler
|
|
|
- var provider : Echo_EchoProvider
|
|
|
-
|
|
|
- fileprivate init(handler:gRPC.Handler, provider: Echo_EchoProvider) {
|
|
|
- self.handler = handler
|
|
|
- self.provider = provider
|
|
|
- }
|
|
|
-
|
|
|
- public func Receive() throws -> Echo_EchoRequest {
|
|
|
- let done = NSCondition()
|
|
|
- var requestMessage : Echo_EchoRequest?
|
|
|
- try self.handler.receiveMessage() {(requestData) in
|
|
|
- if let requestData = requestData {
|
|
|
- requestMessage = try! Echo_EchoRequest(protobuf:requestData)
|
|
|
- }
|
|
|
- done.lock()
|
|
|
- done.signal()
|
|
|
- done.unlock()
|
|
|
- }
|
|
|
- done.lock()
|
|
|
- done.wait()
|
|
|
- done.unlock()
|
|
|
- if requestMessage == nil {
|
|
|
- throw Echo_EchoServerError.endOfStream
|
|
|
- }
|
|
|
- return requestMessage!
|
|
|
- }
|
|
|
-
|
|
|
- public func Send(_ response: Echo_EchoResponse) throws {
|
|
|
- try handler.sendResponse(message:response.serializeProtobuf()) {}
|
|
|
- }
|
|
|
-
|
|
|
- public func Close() {
|
|
|
- let done = NSCondition()
|
|
|
- try! self.handler.sendStatus(statusCode: 0,
|
|
|
- statusMessage: "OK",
|
|
|
- trailingMetadata: Metadata()) {
|
|
|
- done.lock()
|
|
|
- done.signal()
|
|
|
- done.unlock()
|
|
|
- }
|
|
|
- done.lock()
|
|
|
- done.wait()
|
|
|
- done.unlock()
|
|
|
- }
|
|
|
-
|
|
|
- fileprivate func run(queue:DispatchQueue) {
|
|
|
- do {
|
|
|
- try self.handler.sendMetadata(initialMetadata:Metadata()) {
|
|
|
- queue.async {
|
|
|
- try! self.provider.update(session:self)
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (let callError) {
|
|
|
- print("grpc error: \(callError)")
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+//-{% for method in service.method %}
|
|
|
+//-{% if not method.clientStreaming and not method.serverStreaming %}
|
|
|
+//-{% include "server-session-unary.swift" %}
|
|
|
+//-{% endif %}
|
|
|
+//-{% if not method.clientStreaming and method.serverStreaming %}
|
|
|
+//-{% include "server-session-serverstreaming.swift" %}
|
|
|
+//-{% endif %}
|
|
|
+//-{% if method.clientStreaming and not method.serverStreaming %}
|
|
|
+//-{% include "server-session-clientstreaming.swift" %}
|
|
|
+//-{% endif %}
|
|
|
+//-{% if method.clientStreaming and method.serverStreaming %}
|
|
|
+//-{% include "server-session-bidistreaming.swift" %}
|
|
|
+//-{% endif %}
|
|
|
+//-{% endfor %}
|
|
|
|
|
|
//
|
|
|
// main server for generated service
|
|
|
@@ -272,18 +121,14 @@ public class Echo_EchoServer {
|
|
|
+ " from " + handler.caller)
|
|
|
|
|
|
switch handler.method {
|
|
|
- case "/echo.Echo/Get":
|
|
|
- Echo_EchoGetSession(handler:handler, provider:provider).run(queue:queue)
|
|
|
- case "/echo.Echo/Expand":
|
|
|
- Echo_EchoExpandSession(handler:handler, provider:provider).run(queue:queue)
|
|
|
- case "/echo.Echo/Collect":
|
|
|
- Echo_EchoCollectSession(handler:handler, provider:provider).run(queue:queue)
|
|
|
- case "/echo.Echo/Update":
|
|
|
- Echo_EchoUpdateSession(handler:handler, provider:provider).run(queue:queue)
|
|
|
+ //-{% for method in service.method %}
|
|
|
+ case "{{ .|callpath:protoFile,service,method }}":
|
|
|
+ {{ .|sessionname:protoFile,service,method }}(handler:handler, provider:provider).run(queue:queue)
|
|
|
+ //-{% endfor %}
|
|
|
default:
|
|
|
break // handle unknown requests
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+//-{% endfor %}
|