mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
add skynet.harbor.queryname
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
local skynet = require "skynet"
|
||||
|
||||
local globalname = {}
|
||||
local queryname = {}
|
||||
local harbor = {}
|
||||
|
||||
skynet.register_protocol {
|
||||
@@ -17,12 +18,39 @@ skynet.register_protocol {
|
||||
unpack = skynet.tostring,
|
||||
}
|
||||
|
||||
local function response_name(name)
|
||||
local address = globalname[name]
|
||||
if queryname[name] then
|
||||
local tmp = queryname[name]
|
||||
queryname[name] = nil
|
||||
for _,resp in ipairs(tmp) do
|
||||
resp(true, address)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function harbor.REGISTER(name, handle)
|
||||
assert(globalname[name] == nil)
|
||||
globalname[name] = handle
|
||||
response_name(name)
|
||||
skynet.redirect(harbor_service, handle, "harbor", 0, "N " .. name)
|
||||
end
|
||||
|
||||
function harbor.QUERYNAME(fd, name)
|
||||
local result = globalname[name]
|
||||
if result then
|
||||
skynet.ret(skynet.pack(result))
|
||||
return
|
||||
end
|
||||
local queue = queryname[name]
|
||||
if queue == nil then
|
||||
queue = { skynet.response() }
|
||||
queryname[name] = queue
|
||||
else
|
||||
table.insert(queue, skynet.response())
|
||||
end
|
||||
end
|
||||
|
||||
function harbor.LINK(id)
|
||||
skynet.ret()
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user