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>
This commit is contained in:
parent
fd61773031
commit
d009a08473
2 changed files with 34 additions and 0 deletions
12
lua/test.lua
12
lua/test.lua
|
@ -34,6 +34,18 @@ local my_method = {
|
||||||
conn:reply(req, {message="foo2"});
|
conn:reply(req, {message="foo2"});
|
||||||
print("Call to function 'hello1'")
|
print("Call to function 'hello1'")
|
||||||
end, {id = ubus.INT32, msg = ubus.STRING }
|
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, {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
22
lua/ubus.c
22
lua/ubus.c
|
@ -352,6 +352,26 @@ static int ubus_lua_reply(lua_State *L)
|
||||||
return 0;
|
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)
|
static int ubus_lua_load_methods(lua_State *L, struct ubus_method *m)
|
||||||
{
|
{
|
||||||
struct blobmsg_policy *p;
|
struct blobmsg_policy *p;
|
||||||
|
@ -920,6 +940,8 @@ static const luaL_Reg ubus[] = {
|
||||||
{ "add", ubus_lua_add },
|
{ "add", ubus_lua_add },
|
||||||
{ "notify", ubus_lua_notify },
|
{ "notify", ubus_lua_notify },
|
||||||
{ "reply", ubus_lua_reply },
|
{ "reply", ubus_lua_reply },
|
||||||
|
{ "defer_request", ubus_lua_defer_request },
|
||||||
|
{ "complete_deferred_request", ubus_lua_complete_deferred_request },
|
||||||
{ "signatures", ubus_lua_signatures },
|
{ "signatures", ubus_lua_signatures },
|
||||||
{ "call", ubus_lua_call },
|
{ "call", ubus_lua_call },
|
||||||
{ "close", ubus_lua__gc },
|
{ "close", ubus_lua__gc },
|
||||||
|
|
Loading…
Reference in a new issue