summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorruki <[email protected]>2020-01-30 22:48:01 +0800
committerruki <[email protected]>2020-01-30 10:48:06 +0800
commit4cb343a145c152bd3ac3da8704337905408699dc (patch)
tree2948043b2a1d6778e68a7b273feb649879d0e7a0 /core/src
parente992084750b81a09a56fc0a7c428b3861cfb04dc (diff)
improve core/poller
Diffstat (limited to 'core/src')
-rw-r--r--core/src/xmake/io/poller_insert.c25
-rw-r--r--core/src/xmake/io/poller_modify.c25
-rw-r--r--core/src/xmake/io/poller_remove.c23
-rw-r--r--core/src/xmake/io/poller_wait.c8
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);
}