msgpack-rpc: Allow registration of handlers by other modules

This commit is contained in:
Thiago de Arruda 2014-12-04 10:38:10 -03:00
parent 8bb7aa329d
commit 8b6cfff6a1
2 changed files with 10 additions and 1 deletions

View File

@ -252,6 +252,11 @@ end
output:write([[
static Map(String, MsgpackRpcRequestHandler) *methods = NULL;
void msgpack_rpc_add_method_handler(String method, MsgpackRpcRequestHandler handler)
{
map_put(String, MsgpackRpcRequestHandler)(methods, method, handler);
}
void msgpack_rpc_init_method_table(void)
{
methods = map_new(String, MsgpackRpcRequestHandler)();
@ -263,7 +268,7 @@ void msgpack_rpc_init_method_table(void)
local max_fname_len = 0
for i = 1, #functions do
local fn = functions[i]
output:write(' map_put(String, MsgpackRpcRequestHandler)(methods, '..
output:write(' msgpack_rpc_add_method_handler('..
'(String) {.data = "'..fn.name..'", '..
'.size = sizeof("'..fn.name..'") - 1}, '..
'(MsgpackRpcRequestHandler) {.fn = handle_'.. fn.name..

View File

@ -19,6 +19,10 @@ typedef struct {
/// Initializes the msgpack-rpc method table
void msgpack_rpc_init_method_table(void);
// Add a handler to the method table
void msgpack_rpc_add_method_handler(String method,
MsgpackRpcRequestHandler handler);
void msgpack_rpc_init_function_metadata(Dictionary *metadata);
/// Dispatches to the actual API function after basic payload validation by