@@ -9,36 +9,43 @@ gate = tonumber(gate)
99fd = tonumber (fd )
1010
1111local large_request = {}
12+ local inquery_name = {}
13+ local register_name
1214
1315local register_name_mt = { __index =
1416 function (self , name )
15- local waitco = self . __inquery_name [name ]
17+ local waitco = inquery_name [name ]
1618 if waitco then
17- local co = coroutine.running ()
19+ local co = coroutine.running ()
1820 table.insert (waitco , co )
1921 skynet .wait (co )
20- return rawget (self , name )
22+ return rawget (register_name , name )
2123 else
2224 waitco = {}
23- self .__inquery_name [name ] = waitco
24- local addr = skynet .call (clusterd , " lua" , " queryname" , name :sub (2 )) -- name must be '@xxxx'
25- if addr then
26- self [name ] = addr
27- end
28- self .__inquery_name [name ] = nil
29- for _ , co in ipairs (waitco ) do
30- skynet .wakeup (co )
25+ inquery_name [name ] = waitco
26+
27+ while true do
28+ local ctx = register_name
29+ local addr = skynet .call (clusterd , " lua" , " queryname" , name :sub (2 )) -- name must be '@xxxx'
30+ if addr then
31+ ctx [name ] = addr
32+ end
33+ if ctx == register_name then
34+ inquery_name [name ] = nil
35+ for _ , co in ipairs (waitco ) do
36+ skynet .wakeup (co )
37+ end
38+ return addr
39+ end
3140 end
32- return addr
3341 end
3442 end
3543}
3644
3745local function new_register_name ()
38- return setmetatable ({ __inquery_name = {} }, register_name_mt )
46+ register_name = setmetatable ({}, register_name_mt )
3947end
40-
41- local register_name = new_register_name ()
48+ new_register_name ()
4249
4350local tracetag
4451
@@ -136,7 +143,7 @@ skynet.start(function()
136143 socket .close_fd (fd )
137144 skynet .exit ()
138145 elseif cmd == " namechange" then
139- register_name = new_register_name ()
146+ new_register_name ()
140147 else
141148 skynet .error (string.format (" Invalid command %s from %s" , cmd , skynet .address (source )))
142149 end
0 commit comments