diff options
| author | ruki <[email protected]> | 2020-01-30 22:48:01 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-01-30 10:48:06 +0800 |
| commit | 4cb343a145c152bd3ac3da8704337905408699dc (patch) | |
| tree | 2948043b2a1d6778e68a7b273feb649879d0e7a0 /core/src | |
| parent | e992084750b81a09a56fc0a7c428b3861cfb04dc (diff) | |
improve core/poller
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/io/poller_insert.c | 25 | ||||
| -rw-r--r-- | core/src/xmake/io/poller_modify.c | 25 | ||||
| -rw-r--r-- | core/src/xmake/io/poller_remove.c | 23 | ||||
| -rw-r--r-- | core/src/xmake/io/poller_wait.c | 8 |
4 files changed, 52 insertions, 29 deletions
diff --git a/core/src/xmake/io/poller_insert.c b/core/src/xmake/io/poller_insert.c index bb238ad93..9043ed463 100644 --- a/core/src/xmake/io/poller_insert.c +++ b/core/src/xmake/io/poller_insert.c @@ -35,27 +35,34 @@ * interfaces */ -// io.poller_insert(sock, events) +// io.poller_insert(obj:otype(), obj:cdata(), events) tb_int_t xm_io_poller_insert(lua_State* lua) { // check tb_assert_and_check_return_val(lua, 0); // is user data? - if (!lua_isuserdata(lua, 1)) - return 0; + if (!lua_isuserdata(lua, 2)) + { + lua_pushboolean(lua, tb_false); + lua_pushfstring(lua, "invalid poller object!"); + return 2; + } - // get socket - tb_socket_ref_t sock = (tb_socket_ref_t)lua_touserdata(lua, 1); - tb_check_return_val(sock, 0); + // get otype + tb_size_t otype = (tb_size_t)luaL_checknumber(lua, 1); + + // get cdata + tb_pointer_t cdata = (tb_pointer_t)lua_touserdata(lua, 2); + tb_check_return_val(cdata, 0); // get events - tb_size_t events = (tb_size_t)luaL_checknumber(lua, 2); + tb_size_t events = (tb_size_t)luaL_checknumber(lua, 3); // insert events to poller tb_poller_object_t object; - object.type = TB_POLLER_OBJECT_SOCK; - object.ref.sock = sock; + object.type = otype; + object.ref.ptr = cdata; lua_pushboolean(lua, tb_poller_insert(xm_io_poller(), &object, events, tb_null)); return 1; } diff --git a/core/src/xmake/io/poller_modify.c b/core/src/xmake/io/poller_modify.c index 5fea50938..63a172bc6 100644 --- a/core/src/xmake/io/poller_modify.c +++ b/core/src/xmake/io/poller_modify.c @@ -35,27 +35,34 @@ * interfaces */ -// io.poller_modify(sock, events) +// io.poller_modify(obj:otype(), obj:cdata(), events) tb_int_t xm_io_poller_modify(lua_State* lua) { // check tb_assert_and_check_return_val(lua, 0); // is user data? - if (!lua_isuserdata(lua, 1)) - return 0; + if (!lua_isuserdata(lua, 2)) + { + lua_pushboolean(lua, tb_false); + lua_pushfstring(lua, "invalid poller object!"); + return 2; + } - // get socket - tb_socket_ref_t sock = (tb_socket_ref_t)lua_touserdata(lua, 1); - tb_check_return_val(sock, 0); + // get otype + tb_size_t otype = (tb_size_t)luaL_checknumber(lua, 1); + + // get cdata + tb_pointer_t cdata = (tb_pointer_t)lua_touserdata(lua, 2); + tb_check_return_val(cdata, 0); // get events - tb_size_t events = (tb_size_t)luaL_checknumber(lua, 2); + tb_size_t events = (tb_size_t)luaL_checknumber(lua, 3); // modify events in poller tb_poller_object_t object; - object.type = TB_POLLER_OBJECT_SOCK; - object.ref.sock = sock; + object.type = otype; + object.ref.ptr = cdata; lua_pushboolean(lua, tb_poller_modify(xm_io_poller(), &object, events, tb_null)); return 1; } diff --git a/core/src/xmake/io/poller_remove.c b/core/src/xmake/io/poller_remove.c index 2bce6305d..cd5848a17 100644 --- a/core/src/xmake/io/poller_remove.c +++ b/core/src/xmake/io/poller_remove.c @@ -35,24 +35,31 @@ * interfaces */ -// io.poller_remove(sock) +// io.poller_remove(obj:otype(), obj) tb_int_t xm_io_poller_remove(lua_State* lua) { // check tb_assert_and_check_return_val(lua, 0); // is user data? - if (!lua_isuserdata(lua, 1)) - return 0; + if (!lua_isuserdata(lua, 2)) + { + lua_pushboolean(lua, tb_false); + lua_pushfstring(lua, "invalid poller object!"); + return 2; + } - // get socket - tb_socket_ref_t sock = (tb_socket_ref_t)lua_touserdata(lua, 1); - tb_check_return_val(sock, 0); + // get otype + tb_size_t otype = (tb_size_t)luaL_checknumber(lua, 1); + + // get cdata + tb_pointer_t cdata = (tb_pointer_t)lua_touserdata(lua, 2); + tb_check_return_val(cdata, 0); // remove events from poller tb_poller_object_t object; - object.type = TB_POLLER_OBJECT_SOCK; - object.ref.sock = sock; + object.type = otype; + object.ref.ptr = cdata; lua_pushboolean(lua, tb_poller_remove(xm_io_poller(), &object)); return 1; } diff --git a/core/src/xmake/io/poller_wait.c b/core/src/xmake/io/poller_wait.c index 6b466b565..4d531d68a 100644 --- a/core/src/xmake/io/poller_wait.c +++ b/core/src/xmake/io/poller_wait.c @@ -47,12 +47,14 @@ static tb_void_t xm_io_poller_event(tb_poller_ref_t poller, tb_poller_object_ref // check tb_assert_and_check_return(g_lua); - // save socket and events + // save object and events lua_newtable(g_lua); - lua_pushlightuserdata(g_lua, (tb_pointer_t)object->ref.sock); + lua_pushinteger(g_lua, (tb_int_t)object->type); lua_rawseti(g_lua, -2, 1); - lua_pushinteger(g_lua, (tb_int_t)events); + lua_pushlightuserdata(g_lua, object->ref.ptr); lua_rawseti(g_lua, -2, 2); + lua_pushinteger(g_lua, (tb_int_t)events); + lua_rawseti(g_lua, -2, 3); lua_rawseti(g_lua, -2, ++g_events_count); } |
