diff core/src/luan/modules/Rpc.luan @ 762:3f461f85243d

better rpc thread handling
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 20 Jul 2016 23:55:59 -0600
parents 2c41f2aec92f
children
line wrap: on
line diff
--- a/core/src/luan/modules/Rpc.luan	Wed Jul 20 01:52:20 2016 -0600
+++ b/core/src/luan/modules/Rpc.luan	Wed Jul 20 23:55:59 2016 -0600
@@ -3,8 +3,11 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local set_metatable = Luan.set_metatable or error()
+local try = Luan.try or error()
 local Io = require "luan:Io.luan"
 local Thread = require "luan:Thread.luan"
+local Logging = require "luan:logging/Logging.luan"  -- external dependency
+local logger = Logging.logger "Rpc"
 
 
 local M = {}
@@ -37,22 +40,29 @@
 	return M.remote_socket(socket)
 end
 
-function M.responder(fns)
-	local server = Io.socket_server(M.port)
-	return function()
-		local socket = server()
-		M.respond(socket,fns)
+function M.serve(port,fns)
+	local server = Io.socket_server(port or M.port)
+	while true do
+		try {
+			function()
+				local socket = server()
+				local function respond()
+					try {
+						function()
+							M.respond(socket,fns)
+						end
+						catch = function(e)
+							logger.error(e)
+						end
+					}
+				end
+				Thread.fork(respond)
+			end
+			catch = function(e)
+				logger.error(e)
+			end
+		}
 	end
 end
 
---[[
-function M.serve(port,fns)
-	local server = Io.socket_server(port)
-	while true do
-		local socket = server()
-		Thread.fork(function() M.respond(socket,fns) end)
-	end
-end
-]]
-
 return M