src/event_buffer.c

changeset 34
64a79d8ee224
parent 33
0d750f302d66
child 36
139601546bd9
equal deleted inserted replaced
33:0d750f302d66 34:64a79d8ee224
1 /* LuaEvent - Copyright (C) 2007 Thomas Harning <harningt@gmail.com> 1 /* LuaEvent - Copyright (C) 2007 Thomas Harning <harningt@gmail.com>
2 * Licensed as LGPL - See doc/COPYING for details */ 2 * Licensed as LGPL - See doc/COPYING for details */
3 3
4 #include "event_buffer.h" 4 #include "event_buffer.h"
5 #include "luaevent.h"
5 #include <lauxlib.h> 6 #include <lauxlib.h>
6 #include <malloc.h> 7 #include <malloc.h>
7 8
8 #define EVENT_BUFFER_MT "EVENT_BUFFER_MT" 9 #define EVENT_BUFFER_MT "EVENT_BUFFER_MT"
9 10
167 size_t len = luaL_checkinteger(L, 2); 168 size_t len = luaL_checkinteger(L, 2);
168 evbuffer_drain(buf->buffer, len); 169 evbuffer_drain(buf->buffer, len);
169 return 0; 170 return 0;
170 } 171 }
171 172
173 /* LUA: buffer:write
174 (integer/lightuserdata fd) - Attempts to write all the data out to the FD
175 (socket) - Attempts to write all the data out to the socket object
176 */
177 static int event_buffer_write(lua_State* L) {
178 le_buffer* buf = event_buffer_check(L, 1);
179 int ret;
180 if(lua_isnumber(L, 2)) {
181 ret = evbuffer_write(buf->buffer, lua_tointeger(L, 2));
182 } else if(lua_islightuserdata(L, 2)) {
183 ret = evbuffer_write(buf->buffer, (int)(long)lua_touserdata(L, 2));
184 } else if(lua_isuserdata(L, 2)) {
185 ret = evbuffer_write(buf->buffer, getSocketFd(L, 2));
186 } else {
187 luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket");
188 }
189 lua_pushinteger(L, ret);
190 return 1;
191 }
192
193 /* LUA: buffer:read
194 (integer/lightuserdata fd, len) - Attempts to read up to 'len' out of the FD
195 (socket, len) - Attempts to read up to 'len' out of the socket object
196 */
197 static int event_buffer_read(lua_State* L) {
198 le_buffer* buf = event_buffer_check(L, 1);
199 int len = luaL_checkinteger(L, 3);
200 int ret;
201 if(lua_isnumber(L, 2)) {
202 ret = evbuffer_read(buf->buffer, lua_tointeger(L, 2), len);
203 } else if(lua_islightuserdata(L, 2)) {
204 ret = evbuffer_read(buf->buffer, (int)(long)lua_touserdata(L, 2), len);
205 } else if(lua_isuserdata(L, 2)) {
206 ret = evbuffer_read(buf->buffer, getSocketFd(L, 2), len);
207 } else {
208 luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket");
209 }
210 lua_pushinteger(L, ret);
211 return 1;
212 }
172 static luaL_Reg buffer_funcs[] = { 213 static luaL_Reg buffer_funcs[] = {
173 {"add", event_buffer_add}, 214 {"add", event_buffer_add},
174 {"length", event_buffer_get_length}, 215 {"length", event_buffer_get_length},
175 {"get_data", event_buffer_get_data}, 216 {"get_data", event_buffer_get_data},
176 {"readline", event_buffer_readline}, 217 {"readline", event_buffer_readline},
177 {"drain", event_buffer_drain}, 218 {"drain", event_buffer_drain},
178 {"close", event_buffer_gc}, 219 {"close", event_buffer_gc},
220 {"read", event_buffer_read},
221 {"write", event_buffer_write},
179 {NULL, NULL} 222 {NULL, NULL}
180 }; 223 };
181 static luaL_Reg funcs[] = { 224 static luaL_Reg funcs[] = {
182 {"new", event_buffer_push_new}, 225 {"new", event_buffer_push_new},
183 {NULL, NULL} 226 {NULL, NULL}

mercurial