mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-23 19:43:09 +00:00
Merge pull request #298 from JiessieDawn/master
support sharedata serialization
This commit is contained in:
@@ -37,6 +37,16 @@ skynet.start(function()
|
||||
skynet.error(string.format("b[%d]=%s", k,v))
|
||||
end
|
||||
|
||||
-- test lua serialization
|
||||
local s = skynet.packstring(obj)
|
||||
local nobj = skynet.unpack(s)
|
||||
for k,v in pairs(nobj) do
|
||||
skynet.error(string.format("nobj[%s]=%s", k,v))
|
||||
end
|
||||
for k,v in ipairs(nobj) do
|
||||
skynet.error(string.format("nobj.b[%d]=%s", k,v))
|
||||
end
|
||||
|
||||
for i = 1, 5 do
|
||||
skynet.sleep(100)
|
||||
skynet.error("second " ..i)
|
||||
|
||||
@@ -254,14 +254,39 @@ wb_table_hash(lua_State *L, struct write_block * wb, int index, int depth, int a
|
||||
wb_nil(wb);
|
||||
}
|
||||
|
||||
static void
|
||||
wb_table_metapairs(lua_State *L, struct write_block *wb, int index, int depth) {
|
||||
uint8_t n = COMBINE_TYPE(TYPE_TABLE, 0);
|
||||
wb_push(wb, &n, 1);
|
||||
lua_pushvalue(L, index);
|
||||
lua_call(L, 1, 3);
|
||||
for(;;) {
|
||||
lua_pushvalue(L, -2);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_copy(L, -5, -3);
|
||||
lua_call(L, 2, 2);
|
||||
int type = lua_type(L, -2);
|
||||
if (type == LUA_TNIL)
|
||||
break;
|
||||
pack_one(L, wb, -2, depth);
|
||||
pack_one(L, wb, -1, depth);
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
wb_nil(wb);
|
||||
}
|
||||
|
||||
static void
|
||||
wb_table(lua_State *L, struct write_block *wb, int index, int depth) {
|
||||
luaL_checkstack(L, LUA_MINSTACK, NULL);
|
||||
if (index < 0) {
|
||||
index = lua_gettop(L) + index + 1;
|
||||
}
|
||||
int array_size = wb_table_array(L, wb, index, depth);
|
||||
wb_table_hash(L, wb, index, depth, array_size);
|
||||
if (luaL_getmetafield(L, index, "__pairs") != LUA_TNIL) {
|
||||
wb_table_metapairs(L, wb, index, depth);
|
||||
} else {
|
||||
int array_size = wb_table_array(L, wb, index, depth);
|
||||
wb_table_hash(L, wb, index, depth, array_size);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user