diff options
author | Vasily Goldobin <vasily@lynxtech.ru> | 2016-11-16 20:26:13 +0500 |
---|---|---|
committer | John Crispin <john@phrozen.org> | 2016-11-21 11:27:05 +0100 |
commit | d009a084735c7e0bca28ca05919fa9c60007f314 (patch) | |
tree | c82ea79afb91f675e01579c71f0a51c566b03e3a | |
parent | fd61773031402728098800c67f38f83ee04977ad (diff) | |
download | ubus-d009a084735c7e0bca28ca05919fa9c60007f314.tar.gz |
lua: add 'defer_request' and 'complete_deferred_request' functions
Add Lua bindings for 'ubus_defer_request' and 'ubus_complete_deferred_request' functions with sample code.
Signed-off-by: Vasily Goldobin <vasily@lynxtech.ru>
-rwxr-xr-x | lua/test.lua | 12 | ||||
-rw-r--r-- | lua/ubus.c | 22 |
2 files changed, 34 insertions, 0 deletions
diff --git a/lua/test.lua b/lua/test.lua index d24ac6e..277956a 100755 --- a/lua/test.lua +++ b/lua/test.lua @@ -34,6 +34,18 @@ local my_method = { conn:reply(req, {message="foo2"}); print("Call to function 'hello1'") end, {id = ubus.INT32, msg = ubus.STRING } + }, + deferred = { + function(req) + conn:reply(req, {message="wait for it"}) + local def_req = conn:defer_request(req) + uloop.timer(function() + conn:reply(def_req, {message="done"}) + conn:complete_deferred_request(def_req, 0) + print("Deferred request complete") + end, 2000) + print("Call to function 'deferred'") + end, {} } } } @@ -352,6 +352,26 @@ static int ubus_lua_reply(lua_State *L) return 0; } +static int ubus_lua_defer_request(lua_State *L) +{ + struct ubus_lua_connection *c = luaL_checkudata(L, 1, METANAME); + struct ubus_request_data *req = lua_touserdata(L, 2); + struct ubus_request_data *new_req = lua_newuserdata(L, sizeof(struct ubus_request_data)); + ubus_defer_request(c->ctx, req, new_req); + + return 1; +} + +static int ubus_lua_complete_deferred_request(lua_State *L) +{ + struct ubus_lua_connection *c = luaL_checkudata(L, 1, METANAME); + struct ubus_request_data *req = lua_touserdata(L, 2); + int ret = luaL_checkinteger(L, 3); + ubus_complete_deferred_request(c->ctx, req, ret); + + return 0; +} + static int ubus_lua_load_methods(lua_State *L, struct ubus_method *m) { struct blobmsg_policy *p; @@ -920,6 +940,8 @@ static const luaL_Reg ubus[] = { { "add", ubus_lua_add }, { "notify", ubus_lua_notify }, { "reply", ubus_lua_reply }, + { "defer_request", ubus_lua_defer_request }, + { "complete_deferred_request", ubus_lua_complete_deferred_request }, { "signatures", ubus_lua_signatures }, { "call", ubus_lua_call }, { "close", ubus_lua__gc }, |