diff --git a/lualib/localgroup.lua b/lualib/localgroup.lua new file mode 100644 index 00000000..9ae09575 --- /dev/null +++ b/lualib/localgroup.lua @@ -0,0 +1,24 @@ +local skynet = require "skynet" + +local lg + +local group = {} + +function group.create() + return skynet.call(lg, "lua", "NEW" , skynet.self()) +end + +group.address = assert(skynet.query_group) +group.enter = assert(skynet.enter_group) +group.leave = assert(skynet.leave_group) + +function group.release(id) + skynet.send(lg, "lua" , "DELETE", id) +end + +skynet.init(function() + lg = skynet.call(".service","lua","group_local") + assert(lg) +end, "localgroup") + +return group diff --git a/service/group_local.lua b/service/group_local.lua new file mode 100644 index 00000000..cbdc4285 --- /dev/null +++ b/service/group_local.lua @@ -0,0 +1,32 @@ +local skynet = require "skynet" + +local local_group = {} +for i=1,10000 do + local_group[i] = true +end + +local command = {} + +function command.NEW() + local k = next(local_group) + if k then + local_group[k] = nil + skynet.ret(skynet.pack(k)) + else + skynet.ret(skynet.pack(nil)) + end +end + +function command.DELETE(id) + assert(handle_group[id] == nil) + skynet.clear_group(id) + local_group[id] = true +end + +skynet.start(function() + skynet.dispatch("lua", function(_, _, cmd, id) + local f = command[cmd] + assert(f, cmd, id) + f(id) + end) +end) diff --git a/service/group_mgr.lua b/service/group_mgr.lua index edb5a906..88e90d35 100644 --- a/service/group_mgr.lua +++ b/service/group_mgr.lua @@ -1,6 +1,7 @@ local skynet = require "skynet" -local id = 0 +-- read group_local for id 10000 +local id = 10000 local harbor_ctrl = {} local multicast = {} local command = {} diff --git a/service/testgroup.lua b/service/testgroup.lua index 37d2dc5d..7b963cca 100644 --- a/service/testgroup.lua +++ b/service/testgroup.lua @@ -1,5 +1,6 @@ local skynet = require "skynet" local group = require "mcgroup" +--local group = require "localgroup" skynet.start(function() local gid = group.create() diff --git a/service/testgroup_c.lua b/service/testgroup_c.lua index 8309c68c..6a468251 100644 --- a/service/testgroup_c.lua +++ b/service/testgroup_c.lua @@ -1,5 +1,6 @@ local skynet = require "skynet" local group = require "mcgroup" +--local group = require "localgroup" local id, g = ... skynet.start(function()