| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- local InnerMsg = require("core.InnerMsg")
- local Util = require("common.Util")
- -- 负责管理logic到middle的连接
- FD_2_SVRINDEX = FD_2_SVRINDEX or {}
- SVRINDEX_2_FD = SVRINDEX_2_FD or {}
- FD_2_SVRINDEX_MERGE = FD_2_SVRINDEX_MERGE or {} -- 合服之后一个物理服的serverindex其实可能有多个服
- SVRINDEX_2_FD_MERGE = SVRINDEX_2_FD_MERGE or {}
- SVRINDEX_2_OPENDAY = SVRINDEX_2_OPENDAY or {} -- 服务器对应开服天数
- -- 根据svrIndex找对应的fd
- function getFDBySvrIndex(svrIndex)
- local fd = SVRINDEX_2_FD[svrIndex]
- if fd then
- return fd
- end
-
- return SVRINDEX_2_FD_MERGE[svrIndex]
- end
- -- 根据初始svrIndex找当前svrIndex
- function getLastSvrIndex(srcSvrIndex)
- local fd = getFDBySvrIndex(srcSvrIndex)
- if not fd then
- return
- end
- return FD_2_SVRINDEX[fd]
- end
- -- 找一个随机连上了跨服的svrIndex
- function getRandomSvrIndex(exceptFD)
- local cnt = Util.getTableCount(FD_2_SVRINDEX)
- if cnt == 0 then
- return
- end
- if cnt == 1 then
- for k, v in pairs(FD_2_SVRINDEX) do
- if k ~= exceptFD then
- return v
- end
- end
- return
- end
-
- local tempRet = nil
- local randomIndex = math.random(1, cnt)
- for k, v in pairs(FD_2_SVRINDEX) do
- if k ~= exceptFD then
- tempRet = v
- end
- randomIndex = randomIndex - 1
- if randomIndex <= 0 then
- return tempRet
- end
- end
- end
- function addLogicServer(fd, svrIndex)
- if fd == nil or svrIndex == nil then
- assert(nil)
- end
-
- local oldSvrIndex = FD_2_SVRINDEX[fd]
- local oldFd = SVRINDEX_2_FD[svrIndex]
- if oldSvrIndex == svrIndex then return end
-
- FD_2_SVRINDEX[fd] = svrIndex
- SVRINDEX_2_FD[svrIndex] = fd
- if oldSvrIndex and svrIndex ~= oldSvrIndex then
- SVRINDEX_2_FD[oldSvrIndex] = nil
- SVRINDEX_2_OPENDAY[oldSvrIndex] = nil
- end
-
- if oldFd and fd ~= oldFd then
- FD_2_SVRINDEX[oldFd] = nil
- end
- print("addLogicServer", fd, svrIndex)
- end
- function setServerOpenDay(fd,svrIndex,openTime)
- if fd == nil or svrIndex == nil or openTime == nil then
- assert(nil)
- end
- SVRINDEX_2_OPENDAY[svrIndex] = openTime
- print("setServerOpenDay",svrIndex,openTime)
- end
- function delLogicServer(fd)
- if fd == nil then
- assert(nil)
- end
- local svrIndex = FD_2_SVRINDEX[fd]
- FD_2_SVRINDEX[fd] = nil
- if svrIndex then
- SVRINDEX_2_FD[svrIndex] = nil
- end
-
- local svrMerge = FD_2_SVRINDEX_MERGE[fd]
- FD_2_SVRINDEX_MERGE[fd] = nil
- if svrMerge then
- for i = 1, #svrMerge do
- local tempSvrIndex = svrMerge[i]
- SVRINDEX_2_FD_MERGE[tempSvrIndex] = nil
- end
- end
-
- print("delLogicServer", fd, svrIndex)
- end
- function onHeartbeat(fd, svrIndexData)
- if #svrIndexData == 0 then
- return
- end
-
- FD_2_SVRINDEX_MERGE[fd] = FD_2_SVRINDEX_MERGE[fd] or {}
-
-
- for i = 1, #svrIndexData do
- local tempSvrIndex = svrIndexData[i]
- FD_2_SVRINDEX_MERGE[fd][i] = tempSvrIndex
- SVRINDEX_2_FD_MERGE[tempSvrIndex] = fd
- end
- end
- --
- function cleanData(fd)
- local svrIndex = FD_2_SVRINDEX[fd]
- if svrIndex == nil then return end
- -- 根据svrIndex 清除各个模块的数据 注意兼容不报错
- end
- function getOpenDaySvrCnt(openDay,actDay)
- for k,v in pairs(SVRINDEX_2_OPENDAY) do
- if v == 0 then
- return 0
- end
-
- local startTime = Util.getDayStartTime(v)
-
- local now = os.time()
- local openTime = math.ceil((now - startTime + 1) / 24 / 3600)
-
- local actOpenDay = openTime - actDay
- if actOpenDay < openDay and actOpenDay >= 0 then
- return 0
- end
- end
- return 1
- end
- function LW_ABS_ACT_IS_OPEN(fd,msg)
- local isOpen = getOpenDaySvrCnt(msg.openDay,msg.actDay)
- local msgRet = InnerMsg.wl.WL_ABS_ACT_IS_OPEN
- msgRet.funcID = msg.funcID
- msgRet.isOpen = isOpen
- InnerMsg.sendMsg(fd, msgRet)
- end
- -- 获取所有fd
- function MiddleManager_GetAllFD()
- return SVRINDEX_2_FD
- end
|