Mercurial Hosting > luan
annotate src/luan/modules/Rpc.luan @ 775:1a68fc55a80c
simplify dir structure
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 26 Aug 2016 14:36:40 -0600 |
parents | core/src/luan/modules/Rpc.luan@3f461f85243d |
children | bae2d0c2576c |
rev | line source |
---|---|
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1 java() |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
2 local RpcLuan = require "java:luan.modules.RpcLuan" |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
610
diff
changeset
|
3 local Luan = require "luan:Luan.luan" |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
4 local error = Luan.error |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
5 local set_metatable = Luan.set_metatable or error() |
762
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
6 local try = Luan.try or error() |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
610
diff
changeset
|
7 local Io = require "luan:Io.luan" |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
610
diff
changeset
|
8 local Thread = require "luan:Thread.luan" |
762
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
9 local Logging = require "luan:logging/Logging.luan" -- external dependency |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
10 local logger = Logging.logger "Rpc" |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
11 |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
12 |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
13 local M = {} |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
14 |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
15 M.port = 9101 |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
16 |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
17 M.call = RpcLuan.call -- Rpc.call(socket,fn_name,...) |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
18 |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
19 M.functions = {} |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
20 |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
21 function M.respond(socket,fns) |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
22 RpcLuan.respond( socket, fns or M.functions ) |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
23 end |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
24 |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
25 function M.remote_socket(socket_uri) |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
26 local mt = {} |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
27 function mt.__index(_,key) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
28 return function(...) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
29 local socket = Io.uri(socket_uri) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
30 return M.call(socket,key,...) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
31 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
32 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
33 local t = {} |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
34 set_metatable(t,mt) |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
35 return t |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
36 end |
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
37 |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
38 function M.remote(domain) |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
39 local socket = "socket:" .. domain .. ":" .. M.port |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
40 return M.remote_socket(socket) |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
41 end |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
42 |
762
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
43 function M.serve(port,fns) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
44 local server = Io.socket_server(port or M.port) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
45 while true do |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
46 try { |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
47 function() |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
48 local socket = server() |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
49 local function respond() |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
50 try { |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
51 function() |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
52 M.respond(socket,fns) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
53 end |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
54 catch = function(e) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
55 logger.error(e) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
56 end |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
57 } |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
58 end |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
59 Thread.fork(respond) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
60 end |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
61 catch = function(e) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
62 logger.error(e) |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
63 end |
3f461f85243d
better rpc thread handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
743
diff
changeset
|
64 } |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
65 end |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
66 end |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
67 |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
68 return M |