add skynet.harbor.queryname

This commit is contained in:
Cloud Wu
2014-08-13 14:32:28 +08:00
parent cfe8b19c8a
commit cde423cb73
4 changed files with 67 additions and 4 deletions

View File

@@ -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