| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- ---------------------------------------------
- -- 活动跨服分配
- ---------------------------------------------
- local LuaMongo = _G.lua_mongo
- local DB = require("common.DB")
- local Util = require("common.Util")
- local InnerMsg = require("core.InnerMsg")
- local MiddleManager = require("middle.MiddleManager")
- ACTID_2_SVRGROUP = ACTID_2_SVRGROUP or {} -- 活动Id->分组信息
- ACTID_2_GOURPLIST = ACTID_2_GOURPLIST or {} -- [actID][groupID] = list
- -- 活动ID
- ACTID1 = 1 --
- -- X个服务器分为一组
- ACTID_2_SVRNUM = {
- [ACTID1] = 100,
- }
- function cleanSvrGroup(actID)
- ACTID_2_SVRGROUP[actID] = nil
- ACTID_2_GOURPLIST[actID] = nil
- end
- function getMiddleSvrNum(actID)
- return ACTID_2_SVRNUM[actID] or 3
- end
- function getActGroupInfo(actID)
- local groupInfo = {}
- groupInfo.svrGroup = ACTID_2_SVRGROUP[actID]
- groupInfo.groupList = ACTID_2_GOURPLIST[actID]
- return groupInfo
- end
- function setActGroupInfo(actID, groupInfo)
- ACTID_2_SVRGROUP[actID] = groupInfo and groupInfo.svrGroup
- ACTID_2_GOURPLIST[actID] = groupInfo and groupInfo.groupList
- end
- function initSvrGroup(actID)
- ACTID_2_SVRGROUP[actID] = {}
- ACTID_2_GOURPLIST[actID] = {}
- local svrGroup = ACTID_2_SVRGROUP[actID]
- local groups = ACTID_2_GOURPLIST[actID]
- local num = getMiddleSvrNum(actID)
- local cnt = 0
- local groupID = 1
- for svrIndex in Util.pairsByKeys(MiddleManager.SVRINDEX_2_FD) do
- if cnt >= num then
- cnt = 0
- groupID = groupID + 1
- end
- cnt = cnt + 1
- svrGroup[svrIndex] = groupID
- groups[groupID] = groups[groupID] or {}
- groups[groupID][cnt] = svrIndex
- end
- svrGroup.cnt = cnt
- svrGroup.groupID = groupID
- return svrGroup
- end
- local function addSvrGroup(actID, svrIndex)
- local svrGroup = ACTID_2_SVRGROUP[actID]
- if svrGroup[svrIndex] then
- return
- end
- local groups = ACTID_2_GOURPLIST[actID]
- local num = getMiddleSvrNum(actID)
- local cnt = svrGroup.cnt
- local groupID = svrGroup.groupID
- if cnt >= num then
- cnt = 0
- groupID = groupID + 1
- end
- cnt = cnt + 1
- svrGroup[svrIndex] = groupID
- svrGroup.cnt = cnt
- svrGroup.groupID = groupID
- groups[groupID] = groups[groupID] or {}
- groups[groupID][cnt] = svrIndex
- end
- function getSvrGroup(actID, svrIndex)
- if not svrIndex then return end
- local realSvrIndex = MiddleManager.getLastSvrIndex(svrIndex)
- if not realSvrIndex then return end
- local isChange = nil
- if not ACTID_2_SVRGROUP[actID] then
- initSvrGroup(actID)
- isChange = true
- end
- local svrGroup = ACTID_2_SVRGROUP[actID]
- if not svrGroup[realSvrIndex] then
- addSvrGroup(actID, realSvrIndex)
- isChange = true
- end
-
- if isChange == true then
- updateDB(actID)
- end
-
- return svrGroup[realSvrIndex], isChange
- end
- -- 根据活动和分组id获得服务器列表
- function getSvrListByID(actID, groupID)
- local groups = ACTID_2_GOURPLIST[actID]
- if not groups then return end
- return groups[groupID]
- end
- -- 发送到分组
- function send2Group(msg, actID, groupID, noSvrIndex)
- if not _G.is_middle then return end
- local svrList = getSvrListByID(actID, groupID)
- if not svrList then return end
- for _, svrIndex in ipairs(svrList) do
- local fd = MiddleManager.getFDBySvrIndex(svrIndex)
- local noFd = MiddleManager.getFDBySvrIndex(noSvrIndex)
- if fd and fd ~= noFd then
- InnerMsg.sendMsg(fd, msg)
- end
- end
- end
- function initAfterStart()
- if not _G.is_middle then return end
-
- print("initAfterStart")
- LuaMongo.find(DB.db_middle_act_group)
- local groupData = {}
- if LuaMongo.next(groupData) then
- for k, v in pairs(ACTID_2_SVRNUM) do
- setActGroupInfo(k, groupData[k])
- end
- else
- LuaMongo.insert(DB.db_middle_act_group, groupData)
- end
- end
- local query = {}
- function updateDB(actID)
- if not _G.is_middle then return end
- if ACTID_2_SVRNUM[actID] == nil then
- assert(nil)
- end
- LuaMongo.find(DB.db_middle_act_group)
- local groupData = {}
- if LuaMongo.next(groupData) then
- groupData[actID] = groupData[actID] or {}
- groupData[actID].svrGroup = ACTID_2_SVRGROUP[actID]
- groupData[actID].groupList = ACTID_2_GOURPLIST[actID]
-
- query._id = groupData._id
- LuaMongo.update(DB.db_middle_act_group, query, groupData)
- end
- end
|