src/luaevent.c

changeset 23
897150985f13
parent 22
48a109847dce
child 24
cda8e1a2dfa2
equal deleted inserted replaced
22:48a109847dce 23:897150985f13
43 fd = lua_tointeger(L, -1); 43 fd = lua_tointeger(L, -1);
44 lua_pop(L, 1); 44 lua_pop(L, 1);
45 return fd; 45 return fd;
46 } 46 }
47 47
48 /* sock, event, callback */ 48 void load_timeval(double time, struct timeval *tv) {
49 tv->sec = (int)time;
50 tv->usec = (time * 1000000) % 1000000;
51 }
52
53 /* sock, event, callback, timeout */
49 static int luaevent_addevent(lua_State* L) { 54 static int luaevent_addevent(lua_State* L) {
50 int fd, event; 55 int fd, event;
51 le_callback* arg = event_callback_push(L, 1, 4); 56 le_callback* arg = event_callback_push(L, 1, 4);
52 fd = getSocketFd(L, 2); 57 struct timeval *tv = &arg->timeout;
58 if(lua_isnil(L, 2) && lua_isnumber(L, 5)) {
59 fd = -1; /* Per event_timer_set.... */
60 } else {
61 fd = getSocketFd(L, 2);
62 }
53 event = luaL_checkinteger(L, 3); 63 event = luaL_checkinteger(L, 3);
64 if(lua_isnumber(L, 5)) {
65 double time = lua_tonumber(L, 5);
66 load_timeval(time, tv);
67 } else {
68 tv = NULL;
69 }
70
54 /* Setup event... */ 71 /* Setup event... */
55 event_set(&arg->ev, fd, event | EV_PERSIST, luaevent_callback, arg); 72 event_set(&arg->ev, fd, event | EV_PERSIST, luaevent_callback, arg);
56 event_base_set(arg->base->base, &arg->ev); 73 event_base_set(arg->base->base, &arg->ev);
57 event_add(&arg->ev, NULL); 74 event_add(&arg->ev, tv);
58 return 1; 75 return 1;
59 } 76 }
60 77
61 static int luaevent_loop(lua_State* L) { 78 static int luaevent_loop(lua_State* L) {
62 le_base *base = event_base_get(L, 1); 79 le_base *base = event_base_get(L, 1);
84 101
85 static namedInteger consts[] = { 102 static namedInteger consts[] = {
86 {"LEAVE", -1}, 103 {"LEAVE", -1},
87 {"EV_READ", EV_READ}, 104 {"EV_READ", EV_READ},
88 {"EV_WRITE", EV_WRITE}, 105 {"EV_WRITE", EV_WRITE},
106 {"EV_TIMEOUT", EV_TIMEOUT},
89 {NULL, 0} 107 {NULL, 0}
90 }; 108 };
91 109
92 void setNamedIntegers(lua_State* L, namedInteger* p) { 110 void setNamedIntegers(lua_State* L, namedInteger* p) {
93 while(p->name) { 111 while(p->name) {

mercurial