Przeglądaj źródła

Experimental renaming of generated server classes (Echo example).

Tim Burks 9 lat temu
rodzic
commit
d68d5b1eda
1 zmienionych plików z 51 dodań i 28 usunięć
  1. 51 28
      Examples/Echo/Swift/Echo/EchoServer.swift

+ 51 - 28
Examples/Echo/Swift/Echo/EchoServer.swift

@@ -34,12 +34,35 @@ import Foundation
 import gRPC
 import Darwin // for sleep()
 
+
+// This seemed like a nice idea but doesn't work because
+// specific message types are in the protocol signatures.
+// There are also functions in the Session classes that depend
+// on specific message types.
+
+protocol UnaryServer {
+  func handle(message:Echo_EchoRequest) -> Echo_EchoResponse?
+}
+
+protocol ServerStreamingServer {
+  func handle(session:ServerStreamingSession, message:Echo_EchoRequest) -> Void
+}
+
+protocol ClientStreamingServer {
+  func handle(session:ClientStreamingSession, message:Echo_EchoRequest) -> Void
+  func close(session:ClientStreamingSession)
+}
+
+protocol BidiStreamingServer {
+  func handle(session:BidiStreamingSession, message:Echo_EchoRequest) -> Void
+}
+
 // nonstreaming
-class EchoGetSession : Session {
+class UnarySession : Session {
   var handler : Handler
-  var server : EchoGetServer
+  var server : UnaryServer
 
-  init(handler:Handler, server: EchoGetServer) {
+  init(handler:Handler, server: UnaryServer) {
     self.handler = handler
     self.server = server
   }
@@ -64,11 +87,11 @@ class EchoGetSession : Session {
 }
 
 // server streaming
-class EchoExpandSession : Session {
+class ServerStreamingSession : Session {
   var handler : Handler
-  var server : EchoExpandServer
+  var server : ServerStreamingServer
 
-  init(handler:Handler, server: EchoExpandServer) {
+  init(handler:Handler, server: ServerStreamingServer) {
     self.handler = handler
     self.server = server
   }
@@ -92,11 +115,11 @@ class EchoExpandSession : Session {
 }
 
 // client streaming
-class EchoCollectSession : Session {
+class ClientStreamingSession : Session {
   var handler : Handler
-  var server : EchoCollectServer
+  var server : ClientStreamingServer
 
-  init(handler:Handler, server: EchoCollectServer) {
+  init(handler:Handler, server: ClientStreamingServer) {
     self.handler = handler
     self.server = server
   }
@@ -139,11 +162,11 @@ class EchoCollectSession : Session {
 }
 
 // fully streaming
-class EchoUpdateSession : Session {
+class BidiStreamingSession : Session {
   var handler : Handler
-  var server : EchoUpdateServer
+  var server : BidiStreamingServer
 
-  init(handler:Handler, server: EchoUpdateServer) {
+  init(handler:Handler, server: BidiStreamingServer) {
     self.handler = handler
     self.server = server
   }
@@ -215,26 +238,26 @@ class EchoServer {
         + " from " + handler.caller)
 
       if (handler.method == "/echo.Echo/Get") {
-        handler.session = EchoGetSession(handler:handler,
-                                         server:EchoGetServer())
+        handler.session = UnarySession(handler:handler,
+                                       server:EchoGetServer())
         handler.session.run()
       }
 
       else if (handler.method == "/echo.Echo/Expand") {
-        handler.session = EchoExpandSession(handler:handler,
-                                         server:EchoExpandServer())
+        handler.session = ServerStreamingSession(handler:handler,
+                                                 server:EchoExpandServer())
         handler.session.run()
       }
 
       else if (handler.method == "/echo.Echo/Collect") {
-        handler.session = EchoCollectSession(handler:handler,
-                                         server:EchoCollectServer())
+        handler.session = ClientStreamingSession(handler:handler,
+                                                 server:EchoCollectServer())
         handler.session.run()
       }
 
       else if (handler.method == "/echo.Echo/Update") {
-        handler.session = EchoUpdateSession(handler:handler,
-                                            server:EchoUpdateServer())
+        handler.session = BidiStreamingSession(handler:handler,
+                                               server:EchoUpdateServer())
         handler.session.run()
       }
     }
@@ -244,7 +267,7 @@ class EchoServer {
 // The following code is for developer/users to edit.
 // Everything above these lines is intended to be preexisting or generated.
 
-class EchoGetServer {
+class EchoGetServer : UnaryServer {
 
   func handle(message:Echo_EchoRequest) -> Echo_EchoResponse? {
     var reply = Echo_EchoResponse()
@@ -253,9 +276,9 @@ class EchoGetServer {
   }
 }
 
-class EchoExpandServer {
+class EchoExpandServer : ServerStreamingServer {
 
-  func handle(session:EchoExpandSession, message:Echo_EchoRequest) -> Void {
+  func handle(session:ServerStreamingSession, message:Echo_EchoRequest) -> Void {
     let parts = message.text.components(separatedBy: " ")
     var i = 0
     for part in parts {
@@ -268,27 +291,27 @@ class EchoExpandServer {
   }
 }
 
-class EchoCollectServer {
+class EchoCollectServer : ClientStreamingServer {
   var result = ""
 
-  func handle(session:EchoCollectSession, message:Echo_EchoRequest) -> Void {
+  func handle(session:ClientStreamingSession, message:Echo_EchoRequest) -> Void {
     if result != "" {
       result += " "
     }
     result += message.text
   }
 
-  func close(session:EchoCollectSession) {
+  func close(session:ClientStreamingSession) {
     var reply = Echo_EchoResponse()
     reply.text = "Swift echo collect: " + result
     session.sendMessage(message:reply)
   }
 }
 
-class EchoUpdateServer {
+class EchoUpdateServer : BidiStreamingServer {
   var i = 0
 
-  func handle(session:EchoUpdateSession, message:Echo_EchoRequest) -> Void {
+  func handle(session:BidiStreamingSession, message:Echo_EchoRequest) -> Void {
     var reply = Echo_EchoResponse()
     reply.text = "Swift echo update (\(i)): \(message.text)"
     session.sendMessage(message:reply)