unique service

This commit is contained in:
云风
2012-10-12 15:34:10 +08:00
parent 1d59342e7b
commit aaf84ccb6f
5 changed files with 22 additions and 4 deletions

View File

@@ -17,7 +17,7 @@ function group.release(id)
end
skynet.init(function()
lg = skynet.call(".service","lua","group_local")
lg = skynet.uniqueservice("group_local")
assert(lg)
end, "localgroup")

View File

@@ -28,8 +28,8 @@ function group.release(id)
end
skynet.init(function()
SERVICE = skynet.call("SERVICE", "lua", "group_mgr")
skynet.call(".service","lua","group_agent", SERVICE)
SERVICE = skynet.uniqueservice(true, "group_mgr")
skynet.uniqueservice("group_agent", SERVICE)
end, "mcgroup")
return group

View File

@@ -38,7 +38,7 @@ function redis.connect(dbname)
end
skynet.init(function()
redis_manager = skynet.call(".service", "lua", "redis-mgr")
redis_manager = skynet.uniqueservice("redis-mgr")
end, "redis")
return redis

View File

@@ -297,6 +297,23 @@ function skynet.newservice(name, ...)
end
end
function skynet.uniqueservice(global, ...)
local t = 0
while true do
local handle
if global == true then
handle = skynet.call("SERVICE", "lua", ...)
else
handle = skynet.call(".service", "lua", global, ...)
end
if handle then
return handle
end
skynet.sleep(t)
t=t+1
end
end
local function group_command(cmd, handle, address)
if address then
return string.format("%s %d :%x",cmd, handle, address)

View File

@@ -5,6 +5,7 @@ local service = {}
local function query(service_name, ...)
local s = service[service_name]
if s == nil then
service[service_name] = false
s = skynet.newservice(service_name, ...)
service[service_name] = s
end