You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.0 KiB
Lua
46 lines
1.0 KiB
Lua
local skynet = require "skynet"
|
|
local socket = require "skynet.socket"
|
|
|
|
local WATCHDOG
|
|
local host
|
|
local send_request
|
|
|
|
local CMD = {}
|
|
local client_fd
|
|
local gate
|
|
|
|
skynet.register_protocol {
|
|
name = "client",
|
|
id = skynet.PTYPE_CLIENT,
|
|
unpack = skynet.tostring,
|
|
dispatch = function(fd, address, msg)
|
|
assert(fd == client_fd) -- You can use fd to reply message
|
|
skynet.ignoreret() -- session is fd, don't call skynet.ret
|
|
-- skynet.trace()
|
|
-- echo simple
|
|
skynet.send(gate, "lua", "response", fd, msg)
|
|
skynet.error(address, msg)
|
|
end,
|
|
}
|
|
|
|
function CMD.start(conf)
|
|
local fd = conf.client
|
|
gate = conf.gate
|
|
WATCHDOG = conf.watchdog
|
|
client_fd = fd
|
|
skynet.call(gate, "lua", "forward", fd)
|
|
end
|
|
|
|
function CMD.disconnect()
|
|
-- todo: do something before exit
|
|
skynet.exit()
|
|
end
|
|
|
|
skynet.start(function()
|
|
skynet.dispatch("lua", function(_, _, command, ...)
|
|
-- skynet.trace()
|
|
local f = CMD[command]
|
|
skynet.ret(skynet.pack(f(...)))
|
|
end)
|
|
end)
|