Browse Source

Move error handling up out of server handlers and into the main server run loop.

Tim Burks 9 years ago
parent
commit
4ff6cf649e

+ 44 - 57
Examples/Echo/Swift/Generated/echo.server.pb.swift

@@ -65,21 +65,16 @@ public class Echo_EchoGetSession {
   }
 
   /// Run the session. Internal.
-  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())
-
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    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)")
     }
   }
 }
@@ -101,24 +96,20 @@ public class Echo_EchoExpandSession {
   }
 
   /// Run the session. Internal.
-  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:{})
-          }
+  fileprivate func run(queue:DispatchQueue) throws {
+    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)")
     }
   }
 }
@@ -164,15 +155,11 @@ public class Echo_EchoCollectSession {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try self.handler.sendMetadata(initialMetadata:Metadata()) {
-        queue.async {
-          try! self.provider.collect(session:self)
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try self.handler.sendMetadata(initialMetadata:Metadata()) {
+      queue.async {
+        try! self.provider.collect(session:self)
       }
-    } catch (let callError) {
-      print("grpc error: \(callError)")
     }
   }
 }
@@ -230,15 +217,11 @@ public class Echo_EchoUpdateSession {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try self.handler.sendMetadata(initialMetadata:Metadata()) {
-        queue.async {
-          try! self.provider.update(session:self)
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try self.handler.sendMetadata(initialMetadata:Metadata()) {
+      queue.async {
+        try! self.provider.update(session:self)
       }
-    } catch (let callError) {
-      print("grpc error: \(callError)")
     }
   }
 }
@@ -286,17 +269,21 @@ public class Echo_EchoServer {
         + " calling " + handler.method
         + " 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)
-      default:
-        break // handle unknown requests
+      do {
+        switch handler.method {
+        case "/echo.Echo/Get":
+          try Echo_EchoGetSession(handler:handler, provider:provider).run(queue:queue)
+        case "/echo.Echo/Expand":
+          try Echo_EchoExpandSession(handler:handler, provider:provider).run(queue:queue)
+        case "/echo.Echo/Collect":
+          try Echo_EchoCollectSession(handler:handler, provider:provider).run(queue:queue)
+        case "/echo.Echo/Update":
+          try Echo_EchoUpdateSession(handler:handler, provider:provider).run(queue:queue)
+        default:
+          break // handle unknown requests
+        }
+      } catch (let error) {
+        print("Server error: \(error)")
       }
     }
   }

+ 4 - 8
Plugin/templates/server-session-bidistreaming.swift

@@ -51,15 +51,11 @@ public class {{ .|session:protoFile,service,method }} {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try self.handler.sendMetadata(initialMetadata:Metadata()) {
-        queue.async {
-          try! self.provider.update(session:self)
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try self.handler.sendMetadata(initialMetadata:Metadata()) {
+      queue.async {
+        try! self.provider.update(session:self)
       }
-    } catch (let callError) {
-      print("grpc error: \(callError)")
     }
   }
 }

+ 4 - 8
Plugin/templates/server-session-clientstreaming.swift

@@ -39,15 +39,11 @@ public class {{ .|session:protoFile,service,method }} {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try self.handler.sendMetadata(initialMetadata:Metadata()) {
-        queue.async {
-          try! self.provider.collect(session:self)
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try self.handler.sendMetadata(initialMetadata:Metadata()) {
+      queue.async {
+        try! self.provider.collect(session:self)
       }
-    } catch (let callError) {
-      print("grpc error: \(callError)")
     }
   }
 }

+ 12 - 16
Plugin/templates/server-session-serverstreaming.swift

@@ -15,24 +15,20 @@ public class {{ .|session:protoFile,service,method }} {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try self.handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
-        if let requestData = requestData {
-          let requestMessage = try! {{ method|input }}(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:{})
-          }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try self.handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
+      if let requestData = requestData {
+        let requestMessage = try! {{ method|input }}(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)")
     }
   }
 }

+ 9 - 14
Plugin/templates/server-session-unary.swift

@@ -10,21 +10,16 @@ public class {{ .|session:protoFile,service,method }} {
   }
 
   /// Run the session. Internal.
-  fileprivate func run(queue:DispatchQueue) {
-    do {
-      try handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
-        if let requestData = requestData {
-          let requestMessage = try! {{ method|input }}(protobuf:requestData)
-          let replyMessage = try! self.provider.get(request:requestMessage)
-          try self.handler.sendResponse(message:replyMessage.serializeProtobuf(),
-                                        statusCode: 0,
-                                        statusMessage: "OK",
-                                        trailingMetadata:Metadata())
-
-        }
+  fileprivate func run(queue:DispatchQueue) throws {
+    try handler.receiveMessage(initialMetadata:Metadata()) {(requestData) in
+      if let requestData = requestData {
+        let requestMessage = try! {{ method|input }}(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)")
     }
   }
 }

+ 9 - 5
Plugin/templates/server.pb.swift

@@ -121,13 +121,17 @@ public class {{ .|server:protoFile,service }} {
         + " calling " + handler.method
         + " from " + handler.caller)
 
-      switch handler.method {
+      do {
+        switch handler.method {
 	  //-{% for method in service.method %}
-      case "{{ .|path:protoFile,service,method }}":
-        {{ .|session:protoFile,service,method }}(handler:handler, provider:provider).run(queue:queue)
+        case "{{ .|path:protoFile,service,method }}":
+          try {{ .|session:protoFile,service,method }}(handler:handler, provider:provider).run(queue:queue)
 	  //-{% endfor %}
-      default:
-        break // handle unknown requests
+        default:
+          break // handle unknown requests
+        }
+      } catch (let error) {
+        print("Server error: \(error)")
       }
     }
   }