comparison 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
comparison
equal deleted inserted replaced
761:99356cfde2f0 762:3f461f85243d
1 java() 1 java()
2 local RpcLuan = require "java:luan.modules.RpcLuan" 2 local RpcLuan = require "java:luan.modules.RpcLuan"
3 local Luan = require "luan:Luan.luan" 3 local Luan = require "luan:Luan.luan"
4 local error = Luan.error 4 local error = Luan.error
5 local set_metatable = Luan.set_metatable or error() 5 local set_metatable = Luan.set_metatable or error()
6 local try = Luan.try or error()
6 local Io = require "luan:Io.luan" 7 local Io = require "luan:Io.luan"
7 local Thread = require "luan:Thread.luan" 8 local Thread = require "luan:Thread.luan"
9 local Logging = require "luan:logging/Logging.luan" -- external dependency
10 local logger = Logging.logger "Rpc"
8 11
9 12
10 local M = {} 13 local M = {}
11 14
12 M.port = 9101 15 M.port = 9101
35 function M.remote(domain) 38 function M.remote(domain)
36 local socket = "socket:" .. domain .. ":" .. M.port 39 local socket = "socket:" .. domain .. ":" .. M.port
37 return M.remote_socket(socket) 40 return M.remote_socket(socket)
38 end 41 end
39 42
40 function M.responder(fns) 43 function M.serve(port,fns)
41 local server = Io.socket_server(M.port) 44 local server = Io.socket_server(port or M.port)
42 return function() 45 while true do
43 local socket = server() 46 try {
44 M.respond(socket,fns) 47 function()
48 local socket = server()
49 local function respond()
50 try {
51 function()
52 M.respond(socket,fns)
53 end
54 catch = function(e)
55 logger.error(e)
56 end
57 }
58 end
59 Thread.fork(respond)
60 end
61 catch = function(e)
62 logger.error(e)
63 end
64 }
45 end 65 end
46 end 66 end
47 67
48 --[[
49 function M.serve(port,fns)
50 local server = Io.socket_server(port)
51 while true do
52 local socket = server()
53 Thread.fork(function() M.respond(socket,fns) end)
54 end
55 end
56 ]]
57
58 return M 68 return M