83 lines
1.7 KiB
Lua
83 lines
1.7 KiB
Lua
|
|
local skynet = require "skynet"
|
||
|
|
local sharedata = require "skynet.sharedata"
|
||
|
|
|
||
|
|
local mode = ...
|
||
|
|
|
||
|
|
if mode == "host" then
|
||
|
|
|
||
|
|
skynet.start(function()
|
||
|
|
skynet.error("new foobar")
|
||
|
|
sharedata.new("foobar", { a=1, b= { "hello", "world" } })
|
||
|
|
|
||
|
|
skynet.fork(function()
|
||
|
|
skynet.sleep(200) -- sleep 2s
|
||
|
|
skynet.error("update foobar a = 2")
|
||
|
|
sharedata.update("foobar", { a =2 })
|
||
|
|
skynet.sleep(200) -- sleep 2s
|
||
|
|
skynet.error("update foobar a = 3")
|
||
|
|
sharedata.update("foobar", { a = 3, b = { "change" } })
|
||
|
|
skynet.sleep(100)
|
||
|
|
skynet.error("delete foobar")
|
||
|
|
sharedata.delete "foobar"
|
||
|
|
end)
|
||
|
|
end)
|
||
|
|
|
||
|
|
else
|
||
|
|
|
||
|
|
|
||
|
|
skynet.start(function()
|
||
|
|
skynet.newservice(SERVICE_NAME, "host")
|
||
|
|
|
||
|
|
local obj = sharedata.query "foobar"
|
||
|
|
|
||
|
|
local b = obj.b
|
||
|
|
skynet.error(string.format("a=%d", obj.a))
|
||
|
|
|
||
|
|
for k,v in ipairs(b) do
|
||
|
|
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.b) do
|
||
|
|
skynet.error(string.format("nobj.b[%d]=%s", k,v))
|
||
|
|
end
|
||
|
|
|
||
|
|
for i = 1, 5 do
|
||
|
|
skynet.sleep(100)
|
||
|
|
skynet.error("second " ..i)
|
||
|
|
for k,v in pairs(obj) do
|
||
|
|
skynet.error(string.format("%s = %s", k , tostring(v)))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local ok, err = pcall(function()
|
||
|
|
local tmp = { b[1], b[2] } -- b is invalid , so pcall should failed
|
||
|
|
end)
|
||
|
|
|
||
|
|
if not ok then
|
||
|
|
skynet.error(err)
|
||
|
|
end
|
||
|
|
|
||
|
|
-- obj. b is not the same with local b
|
||
|
|
for k,v in ipairs(obj.b) do
|
||
|
|
skynet.error(string.format("b[%d] = %s", k , tostring(v)))
|
||
|
|
end
|
||
|
|
|
||
|
|
collectgarbage()
|
||
|
|
skynet.error("sleep")
|
||
|
|
skynet.sleep(100)
|
||
|
|
b = nil
|
||
|
|
collectgarbage()
|
||
|
|
skynet.error("sleep")
|
||
|
|
skynet.sleep(100)
|
||
|
|
|
||
|
|
skynet.exit()
|
||
|
|
end)
|
||
|
|
|
||
|
|
end
|