Browse Source

Renamed classes in server architecture.

Tim Burks 9 years ago
parent
commit
6470a909f1
2 changed files with 59 additions and 72 deletions
  1. 56 69
      Examples/Echo/Swift/Echo/EchoServer.swift
  2. 3 3
      Packages/gRPC/Sources/Handler.swift

+ 56 - 69
Examples/Echo/Swift/Echo/EchoServer.swift

@@ -34,38 +34,26 @@ import Foundation
 import gRPC
 import gRPC
 import QuickProto
 import QuickProto
 
 
-class EchoGetHandler : HandlerHelper {
-  var requestHandler : Handler
-  var service : EchoGetService
-
-  init(requestHandler:Handler,
-       service: EchoGetService) {
-    self.requestHandler = requestHandler
-    self.service = service
-  }
+class EchoGetSession : Session {
+  var handler : Handler
+  var server : EchoGetServer
 
 
-  // return an empty message of the destination type
-  func replyMessage() -> Message {
-    let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out")!
-    return fileDescriptorSet.makeMessage("EchoResponse")!
-  }
-
-  // send a message
-  func sendMessage(message:Message) -> Void {
-    try! requestHandler.sendResponse(message:message.data()) {}
+  init(handler:Handler, server: EchoGetServer) {
+    self.handler = handler
+    self.server = server
   }
   }
 
 
   func run() {
   func run() {
     do {
     do {
-      try requestHandler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
+      try handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
         if let requestData = requestData,
         if let requestData = requestData,
           let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out"),
           let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out"),
           let requestMessage = fileDescriptorSet.readMessage("EchoRequest", data:requestData) {
           let requestMessage = fileDescriptorSet.readMessage("EchoRequest", data:requestData) {
-          if let replyMessage = self.service.handle(handler:self, request:requestMessage) { // calling stub
-            try self.requestHandler.sendResponse(message:replyMessage.data(),
-                                                 statusCode: 0,
-                                                 statusMessage: "OK",
-                                                 trailingMetadata:Metadata())
+          if let replyMessage = self.server.handle(message:requestMessage) { // calling stub
+            try self.handler.sendResponse(message:replyMessage.data(),
+                                          statusCode: 0,
+                                          statusMessage: "OK",
+                                          trailingMetadata:Metadata())
           }
           }
         }
         }
       }
       }
@@ -75,41 +63,35 @@ class EchoGetHandler : HandlerHelper {
   }
   }
 }
 }
 
 
-class EchoUpdateHandler : HandlerHelper {
-  var requestHandler : Handler
-  var service : EchoUpdateService
-
-  init(requestHandler:Handler,
-       service: EchoUpdateService) {
-    self.requestHandler = requestHandler
-    self.service = service
-  }
+class EchoUpdateSession : Session {
+  var handler : Handler
+  var server : EchoUpdateServer
 
 
-  func replyMessage() -> Message {
-    let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out")!
-    return fileDescriptorSet.makeMessage("EchoResponse")!
+  init(handler:Handler, server: EchoUpdateServer) {
+    self.handler = handler
+    self.server = server
   }
   }
 
 
   func sendMessage(message:Message) -> Void {
   func sendMessage(message:Message) -> Void {
-    try! requestHandler.sendResponse(message:message.data()) {}
+    try! handler.sendResponse(message:message.data()) {}
   }
   }
 
 
-  func wait() {
+  func waitForMessage() {
     do {
     do {
-      try requestHandler.receiveMessage() {(requestData) in
+      try handler.receiveMessage() {(requestData) in
         if let requestData = requestData {
         if let requestData = requestData {
           if let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out"),
           if let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out"),
             let requestMessage = fileDescriptorSet.readMessage("EchoRequest", data:requestData) {
             let requestMessage = fileDescriptorSet.readMessage("EchoRequest", data:requestData) {
-            self.wait()
-            self.service.handle(handler:self, request:requestMessage)
+            self.waitForMessage()
+            self.server.handle(session:self, message:requestMessage)
           }
           }
         } else {
         } else {
           // if we get an empty message (requestData == nil), we close the connection
           // if we get an empty message (requestData == nil), we close the connection
-          try self.requestHandler.sendStatus(statusCode: 0,
-                                             statusMessage: "OK",
-                                             trailingMetadata: Metadata())
+          try self.handler.sendStatus(statusCode: 0,
+                                      statusMessage: "OK",
+                                      trailingMetadata: Metadata())
           {
           {
-            self.requestHandler.shutdown()
+            self.handler.shutdown()
           }
           }
         }
         }
       }
       }
@@ -120,8 +102,8 @@ class EchoUpdateHandler : HandlerHelper {
 
 
   func run() {
   func run() {
     do {
     do {
-      try self.requestHandler.sendMetadata(initialMetadata:Metadata()) {
-        self.wait()
+      try self.handler.sendMetadata(initialMetadata:Metadata()) {
+        self.waitForMessage()
       }
       }
     } catch (let callError) {
     } catch (let callError) {
       print("grpc error: \(callError)")
       print("grpc error: \(callError)")
@@ -132,7 +114,6 @@ class EchoUpdateHandler : HandlerHelper {
 class EchoServer {
 class EchoServer {
   private var address: String
   private var address: String
   private var server: Server
   private var server: Server
-  private var handlers: Set<NSObject> = []
 
 
   init(address:String, secure:Bool) {
   init(address:String, secure:Bool) {
     gRPC.initialize()
     gRPC.initialize()
@@ -152,21 +133,21 @@ class EchoServer {
     print("Server Starting")
     print("Server Starting")
     print("GRPC version " + gRPC.version())
     print("GRPC version " + gRPC.version())
 
 
-    server.run {(requestHandler) in
-      print("Server received request to " + requestHandler.host
-        + " calling " + requestHandler.method
-        + " from " + requestHandler.caller)
+    server.run {(handler) in
+      print("Server received request to " + handler.host
+        + " calling " + handler.method
+        + " from " + handler.caller)
 
 
-      if (requestHandler.method == "/echo.Echo/Get") {
-        requestHandler.helper = EchoGetHandler(requestHandler:requestHandler,
-                                               service:EchoGetService())
-        requestHandler.helper.run()
+      if (handler.method == "/echo.Echo/Get") {
+        handler.session = EchoGetSession(handler:handler,
+                                         server:EchoGetServer())
+        handler.session.run()
       }
       }
 
 
-      if (requestHandler.method == "/echo.Echo/Update") {
-        requestHandler.helper = EchoUpdateHandler(requestHandler:requestHandler,
-                                                  service:EchoUpdateService())
-        requestHandler.helper.run()
+      if (handler.method == "/echo.Echo/Update") {
+        handler.session = EchoUpdateSession(handler:handler,
+                                            server:EchoUpdateServer())
+        handler.session.run()
       }
       }
     }
     }
   }
   }
@@ -175,24 +156,30 @@ class EchoServer {
 // The following code is for developer/users to edit.
 // The following code is for developer/users to edit.
 // Everything above these lines is intended to be preexisting or generated.
 // Everything above these lines is intended to be preexisting or generated.
 
 
-class EchoGetService {
-  func handle(handler:EchoGetHandler, request:Message) -> Message? {
-    if let field = request.oneField("text") {
-      let reply = handler.replyMessage()
+class EchoGetServer {
+
+  func handle(message:Message) -> Message? {
+    if let field = message.oneField("text") {
+      let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out")!
+      let reply = fileDescriptorSet.makeMessage("EchoResponse")!
       reply.addField("text", value:"Swift nonstreaming echo " + field.string())
       reply.addField("text", value:"Swift nonstreaming echo " + field.string())
       return reply
       return reply
     }
     }
     return nil
     return nil
   }
   }
+
 }
 }
 
 
-class EchoUpdateService {
-  func handle(handler:EchoUpdateHandler, request:Message) -> Void {
-    if let field = request.oneField("text") {
-      let reply = handler.replyMessage()
+class EchoUpdateServer {
+
+  func handle(session:EchoUpdateSession, message:Message) -> Void {
+    if let field = message.oneField("text") {
+      let fileDescriptorSet = FileDescriptorSet.from(filename:"echo.out")!
+      let reply = fileDescriptorSet.makeMessage("EchoResponse")!
       reply.addField("text", value:"Swift streaming echo " + field.string())
       reply.addField("text", value:"Swift streaming echo " + field.string())
-      handler.sendMessage(message:reply)
+      session.sendMessage(message:reply)
     }
     }
   }
   }
+
 }
 }
 
 

+ 3 - 3
Packages/gRPC/Sources/Handler.swift

@@ -35,7 +35,7 @@
 #endif
 #endif
 import Foundation // for String.Encoding
 import Foundation // for String.Encoding
 
 
-public protocol HandlerHelper {
+public protocol Session {
   func run() -> Void
   func run() -> Void
 }
 }
 
 
@@ -50,8 +50,8 @@ public class Handler {
   /// Metadata received with the request
   /// Metadata received with the request
   public var requestMetadata: Metadata
   public var requestMetadata: Metadata
 
 
-  /// Anything we want retained until the handler is destroyed
-  public var helper : HandlerHelper!
+  /// runnable object that we want retained until the handler is destroyed
+  public var session : Session!
 
 
   /// A Call object that can be used to respond to the request
   /// A Call object that can be used to respond to the request
   internal lazy var call: Call = {
   internal lazy var call: Call = {