From 011cb1aaf681b1e1b88e4d61417e1470e2124576 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 9 Mar 2021 16:29:55 -0600 Subject: [PATCH] starting testing cross-language RPC --- .gitignore | 4 ++++ pagos-dev-1.rockspec | 18 ++++++++++++++++++ tmp/rpc_client.lua | 31 +++++++++++++++++++++++++++++++ tmp/rpc_server.py | 11 +++++++++++ 4 files changed, 64 insertions(+) create mode 100644 .gitignore create mode 100644 pagos-dev-1.rockspec create mode 100644 tmp/rpc_client.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0771553 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/luarocks +/lua +/lua_modules +/.luarocks diff --git a/pagos-dev-1.rockspec b/pagos-dev-1.rockspec new file mode 100644 index 0000000..d6902e0 --- /dev/null +++ b/pagos-dev-1.rockspec @@ -0,0 +1,18 @@ +package = "pagos" +version = "alpha0.0.1" +source = { + url = "*** please add URL for source tarball, zip or repository here ***" +} +description = { + summary = "", + detailed = "", + homepage = "*** please enter a project homepage ***", + license = "GPLv2" +} +build = { + type = "builtin", + modules = {}, + copy_directories = { + "docs" + } +} diff --git a/tmp/rpc_client.lua b/tmp/rpc_client.lua new file mode 100644 index 0000000..ad84553 --- /dev/null +++ b/tmp/rpc_client.lua @@ -0,0 +1,31 @@ +package.path = "../lua_modules/share/lua/5.1/?.lua;../lua_modules/share/lua/5.1/?/init.lua;" .. package.path +package.cpath = "../lua_modules/lib/lua/5.1/?.so;" .. package.cpath + +require "xmlrpc.http" + +function XMLRPCWrapper(host) + local o = { } + setmetatable(o, { + __index = function(t, func_name) + return function(...) + local ok, res = xmlrpc.http.call(host, func_name, ...) + assert(ok, "RPC failed on " .. func_name) + return res + end + end; + }) + + return o +end + +local app = XMLRPCWrapper("http://localhost:8000/RPC2") + +print("Result: " .. app.add(2, 3)) +print("Something: " .. app.add_and_get()) + +print("Sum: " .. app.sum({ 1, 2, 3, 4, 5 })) + +local primes = app.get_some_primes() +for key, prime in ipairs(primes) do + print(prime[1], prime[2]) +end diff --git a/tmp/rpc_server.py b/tmp/rpc_server.py index f30a25f..c832ffd 100644 --- a/tmp/rpc_server.py +++ b/tmp/rpc_server.py @@ -18,6 +18,17 @@ with SimpleXMLRPCServer(('localhost', 8000), requestHandler=RequestHandler) as s def add(x, y): return x + y + @server.register_function() + def sum(numbers): + from functools import reduce + + value = reduce(lambda a, b: a + b, numbers.values()) + return value + + @server.register_function() + def get_some_primes(): + return [ (1, 2), (2, 3), (3, 5), (4, 7), (5, 11), (6, 13) , (7, 17) ] + server.register_instance(SomeState()) server.serve_forever() -- 2.25.1