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) { |