mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 04:33:05 +00:00
readblock support var size
This commit is contained in:
@@ -231,6 +231,7 @@ _readline(lua_State *L) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
userdata buffer
|
userdata buffer
|
||||||
|
intteger header
|
||||||
function (msg, sz, ...)
|
function (msg, sz, ...)
|
||||||
...
|
...
|
||||||
*/
|
*/
|
||||||
@@ -243,27 +244,40 @@ _readblock(lua_State *L) {
|
|||||||
if (size < 2) {
|
if (size < 2) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int header_size = luaL_checkinteger(L,2);
|
||||||
uint8_t * buf = (uint8_t *)buffer->buffer + buffer->read;
|
uint8_t * buf = (uint8_t *)buffer->buffer + buffer->read;
|
||||||
uint16_t len = buf[0] << 8 | buf[1];
|
uint16_t len;
|
||||||
if (size < 2 + len) {
|
if (header_size == 2) {
|
||||||
|
len = buf[0] << 8 | buf[1];
|
||||||
|
} else {
|
||||||
|
if (header_size != 4) {
|
||||||
|
return luaL_error(L, "header size must be 2 or 4");
|
||||||
|
}
|
||||||
|
len = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
|
||||||
|
}
|
||||||
|
if (size < header_size + len) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (top == 2) {
|
if (top == 3) {
|
||||||
lua_pushlightuserdata(L, buffer->buffer + buffer->read + 2);
|
lua_pushlightuserdata(L, buffer->buffer + buffer->read + header_size);
|
||||||
lua_pushinteger(L, len);
|
lua_pushinteger(L, len);
|
||||||
lua_call(L,2,LUA_MULTRET);
|
lua_call(L,2,LUA_MULTRET);
|
||||||
|
|
||||||
|
buffer->read += len + header_size;
|
||||||
|
return lua_gettop(L) - 2;
|
||||||
} else {
|
} else {
|
||||||
lua_pushlightuserdata(L, buffer->buffer + buffer->read + 2);
|
lua_pushvalue(L,3);
|
||||||
lua_insert(L,3);
|
lua_replace(L,1);
|
||||||
|
lua_pushlightuserdata(L, buffer->buffer + buffer->read + header_size);
|
||||||
|
lua_replace(L,2);
|
||||||
lua_pushinteger(L, len);
|
lua_pushinteger(L, len);
|
||||||
lua_insert(L,4);
|
lua_replace(L,3);
|
||||||
lua_call(L,top,LUA_MULTRET);
|
lua_call(L,top-1,LUA_MULTRET);
|
||||||
|
|
||||||
|
buffer->read += len + header_size;
|
||||||
|
return lua_gettop(L);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer->read += len + 2;
|
|
||||||
|
|
||||||
return lua_gettop(L) - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
Reference in New Issue
Block a user