mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 12:43:09 +00:00
new_register_name() (#1949)
This commit is contained in:
@@ -9,36 +9,43 @@ gate = tonumber(gate)
|
|||||||
fd = tonumber(fd)
|
fd = tonumber(fd)
|
||||||
|
|
||||||
local large_request = {}
|
local large_request = {}
|
||||||
|
local inquery_name = {}
|
||||||
|
local register_name
|
||||||
|
|
||||||
local register_name_mt = { __index =
|
local register_name_mt = { __index =
|
||||||
function(self, name)
|
function(self, name)
|
||||||
local waitco = self.__inquery_name[name]
|
local waitco = inquery_name[name]
|
||||||
if waitco then
|
if waitco then
|
||||||
local co=coroutine.running()
|
local co = coroutine.running()
|
||||||
table.insert(waitco, co)
|
table.insert(waitco, co)
|
||||||
skynet.wait(co)
|
skynet.wait(co)
|
||||||
return rawget(self, name)
|
return rawget(register_name, name)
|
||||||
else
|
else
|
||||||
waitco = {}
|
waitco = {}
|
||||||
self.__inquery_name[name] = waitco
|
inquery_name[name] = waitco
|
||||||
|
|
||||||
|
while true do
|
||||||
|
local ctx = register_name
|
||||||
local addr = skynet.call(clusterd, "lua", "queryname", name:sub(2)) -- name must be '@xxxx'
|
local addr = skynet.call(clusterd, "lua", "queryname", name:sub(2)) -- name must be '@xxxx'
|
||||||
if addr then
|
if addr then
|
||||||
self[name] = addr
|
ctx[name] = addr
|
||||||
end
|
end
|
||||||
self.__inquery_name[name] = nil
|
if ctx == register_name then
|
||||||
|
inquery_name[name] = nil
|
||||||
for _, co in ipairs(waitco) do
|
for _, co in ipairs(waitco) do
|
||||||
skynet.wakeup(co)
|
skynet.wakeup(co)
|
||||||
end
|
end
|
||||||
return addr
|
return addr
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
local function new_register_name()
|
local function new_register_name()
|
||||||
return setmetatable({ __inquery_name = {} }, register_name_mt)
|
register_name = setmetatable({}, register_name_mt)
|
||||||
end
|
end
|
||||||
|
new_register_name()
|
||||||
local register_name = new_register_name()
|
|
||||||
|
|
||||||
local tracetag
|
local tracetag
|
||||||
|
|
||||||
@@ -136,7 +143,7 @@ skynet.start(function()
|
|||||||
socket.close_fd(fd)
|
socket.close_fd(fd)
|
||||||
skynet.exit()
|
skynet.exit()
|
||||||
elseif cmd == "namechange" then
|
elseif cmd == "namechange" then
|
||||||
register_name = new_register_name()
|
new_register_name()
|
||||||
else
|
else
|
||||||
skynet.error(string.format("Invalid command %s from %s", cmd, skynet.address(source)))
|
skynet.error(string.format("Invalid command %s from %s", cmd, skynet.address(source)))
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user