make service mgr simple

This commit is contained in:
Cloud Wu
2014-04-19 17:03:58 +08:00
parent 93cb091894
commit ba27feee35
2 changed files with 20 additions and 35 deletions

View File

@@ -414,8 +414,8 @@ function skynet.uniqueservice(...)
return assert(skynet.call(".service", "lua", "LAUNCH", ...)) return assert(skynet.call(".service", "lua", "LAUNCH", ...))
end end
function skynet.queryservice(global, name) function skynet.queryservice(...)
return assert(skynet.call(".service", "lua", "QUERY", global, name)) return assert(skynet.call(".service", "lua", "QUERY", ...))
end end
local function group_command(cmd, handle, address) local function group_command(cmd, handle, address)

View File

@@ -57,49 +57,34 @@ local function waitfor(name , func, ...)
return s return s
end end
local function GQUERY(service_name) function cmd.LAUNCH(service_name, ...)
if GLOBAL then return waitfor(service_name, skynet.newservice, service_name, ...)
return cmd.QUERY(service_name)
else
return waitfor(service_name, skynet.call, "SERVICE", "lua", "QUERY", service_name)
end
end end
local function GLAUNCH(service_name, ...) function cmd.QUERY(service_name)
if GLOBAL then return waitfor(service_name)
return cmd.LAUNCH(service_name, ...)
else
return waitfor(service_name, skynet.call, "SERVICE", "lua", "LAUNCH", service_name, ...)
end
end
function cmd.LAUNCH(global, service_name, ...)
if global == true then
return GLAUNCH(service_name, ...)
else
assert(type(global) == "string")
return waitfor(global, skynet.newservice, global, service_name, ...)
end
end
function cmd.QUERY(global, service_name)
if global == true then
return GQUERY(service_name)
else
assert(type(global) == "string")
return waitfor(global)
end
end end
skynet.start(function() skynet.start(function()
skynet.dispatch("lua", function(session, address, command, service_name , ...) skynet.dispatch("lua", function(session, address, command, global, service_name , ...)
local f = cmd[command] local f = cmd[command]
if f == nil then if f == nil then
skynet.ret(skynet.pack(nil)) skynet.ret(skynet.pack(nil, "Invalid command " .. command))
return return
end end
local ok, r = pcall(f, service_name, ...) local ok, r
if global == true then
if GLOBAL then
ok, r = pcall(f, service_name, ...)
else
return waitfor(service_name, skynet.call, "SERVICE", "lua", command, service_name, ...)
end
else
assert(type(global) == "string") -- global is service_name
ok, r = pcall(f, global, service_name, ...)
end
if ok then if ok then
skynet.ret(skynet.pack(r)) skynet.ret(skynet.pack(r))
else else