95 lines
1.8 KiB
Lua
95 lines
1.8 KiB
Lua
local skynet = require "skynet"
|
|
|
|
local mode = ...
|
|
|
|
if mode == "slave" then
|
|
|
|
local COMMAND = {}
|
|
|
|
function COMMAND.ping(ti, str)
|
|
skynet.sleep(ti)
|
|
return str
|
|
end
|
|
|
|
function COMMAND.error()
|
|
error "ERROR"
|
|
end
|
|
|
|
function COMMAND.exit()
|
|
skynet.exit()
|
|
end
|
|
|
|
skynet.start(function()
|
|
skynet.dispatch("lua", function(_,_, cmd, ...)
|
|
skynet.ret(skynet.pack(COMMAND[cmd](...)))
|
|
end)
|
|
end)
|
|
|
|
else
|
|
|
|
local function info(fmt, ...)
|
|
skynet.error(string.format(fmt, ...))
|
|
end
|
|
|
|
skynet.start(function()
|
|
local slave = skynet.newservice(SERVICE_NAME, "slave")
|
|
|
|
for req, resp in skynet.request
|
|
{ slave, "lua", "ping", 6, "SLEEP 6" }
|
|
{ slave, "lua", "ping", 5, "SLEEP 5" }
|
|
{ slave, "lua", "ping", 4, "SLEEP 4" }
|
|
{ slave, "lua", "ping", 3, "SLEEP 3" }
|
|
{ slave, "lua", "ping", 2, "SLEEP 2" }
|
|
{ slave, "lua", "ping", 1, "SLEEP 1" }
|
|
:select() do
|
|
info("RESP %s", resp[1])
|
|
end
|
|
|
|
-- test timeout
|
|
local reqs = skynet.request()
|
|
|
|
for i = 1, 10 do
|
|
reqs:add { slave, "lua", "ping", i*10, "SLEEP " .. i, token = i }
|
|
end
|
|
|
|
for req, resp in reqs:select(50) do
|
|
info("RESP %s token<%s>", resp[1], req.token)
|
|
end
|
|
|
|
-- test error
|
|
|
|
for req, resp in skynet.request
|
|
{ slave, "lua", "error" }
|
|
{ slave, "lua", "ping", 0, "PING" }
|
|
: select() do
|
|
if resp then
|
|
info("Ping : %s", resp[1])
|
|
else
|
|
info("Error")
|
|
end
|
|
end
|
|
|
|
-- timeout call
|
|
|
|
local reqs = skynet.request { slave, "lua", "ping", 100 , "PING" }
|
|
for req, resp in reqs:select(10) do
|
|
info("%s", resp[1])
|
|
end
|
|
|
|
info("Timeout : %s", reqs.timeout)
|
|
|
|
-- call in select
|
|
for req, resp in skynet.request
|
|
{ slave, "lua", "ping", 20, "CALL 20" }
|
|
{ slave, "lua", "ping", 10, "CALL 10" }
|
|
: select() do
|
|
info("%s", skynet.call( slave, "lua", "ping", 0, "ping in " .. resp[1]) )
|
|
skynet.sleep(50)
|
|
end
|
|
|
|
skynet.send(slave, "lua", "exit")
|
|
skynet.exit()
|
|
end)
|
|
|
|
end
|