| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- local Config = require("Config")
- Json = Json or require("common.Json")
- local InnerMsg = require("core.InnerMsg")
- local CommonDB = require("common.CommonDB")
- local MiddleManager = require("middle.MiddleManager")
- local ObjHuman = require("core.ObjHuman")
- local CommonDefine = require("common.CommonDefine")
- local Util = require("common.Util")
- -- 禁止等级
- local BAN_LEVEL1 = 1 --禁角色
- local BAN_LEVEL2 = 2 --禁账号
- local BAN_LEVEL3 = 3 --禁设备
- ------------------------------------------当前服是普通服的处理------------------------------------------
- -- 缓存的禁止登录信息列表
- local all_ban_list = {}
- local function generateTag(args)
- local strTag = ""
- for _, str in ipairs(args) do
- if strTag == "" then
- strTag = str
- else
- strTag = strTag .. "|" .. str
- end
- end
- return strTag
- end
- local function isSame(str, account)
- local t = Util.split(str, "|")
- account = tostring(account)
- if t[2] == account then
- return true
- end
- return false
- end
- -- 更新本地禁止登录信息缓存
- local function updateBanListCache(banTag, banTime)
- if banTime == 0 then
- all_ban_list[banTag] = nil
- else
- all_ban_list[banTag] = banTime
- end
- end
- -- 通过uuid踢人
- local function kickPlayerByuuid(uuid)
- if ObjHuman.onlineUuid[uuid] then
- ObjHuman.doDisconnect(ObjHuman.onlineUuid[uuid], CommonDefine.DISCONNECT_BAN_ROLE)
- local Handler = require("scene.Handler")
- Handler.sendDisconnect(ObjHuman.onlineUuid[uuid].fd, CommonDefine.DISCONNECT_BAN_ROLE)
- end
- end
- -- 通过account踢人
- local function kickPlayerByAccount(account)
- for uTag, h in pairs(ObjHuman.onlineNewUniqueTag) do
- if isSame(uTag, account) then
- ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_BANUSER)
- local Handler = require("scene.Handler")
- Handler.sendDisconnect(h.fd, CommonDefine.DISCONNECT_BANUSER)
- break
- end
- end
- end
- -- 向跨服请求封禁数据
- function NS_Get_BanData()
- local tMsgData = InnerMsg.lw.LW_QUERY_BAN_INFO
- tMsgData.nSrcServerID = Config.SVR_INDEX
- InnerMsg.sendMsg(0, tMsgData)
- end
- -- 收到跨服推送的封禁数据
- function NS_Init_BanData(banList)
- for k ,v in pairs(banList) do
- updateBanListCache(k, v)
- end
- end
- -- 通知跨服更新封禁数据
- function Update_CrossServer_BanData(banTag, banTime, banLevel)
- local tMsgData = InnerMsg.lw.LW_UPDATE_BAN_INFO
- tMsgData.nSrcServerID = Config.SVR_INDEX
- tMsgData.banTag = banTag
- tMsgData.banTime = banTime
- tMsgData.banLevel = banLevel
- InnerMsg.sendMsg(0, tMsgData)
- end
- -- 收到跨服推送的要更新的封禁数据
- function NS_Update_BanData(banTag, banTime, banLevel)
- updateBanListCache(banTag, banTime)
- --踢对应账号玩家下线
- if banLevel == BAN_LEVEL2 then
- local tbl = Util.split(banTag, "|")
- kickPlayerByAccount(tbl[2])
- end
- -- 根据设备踢人
- -- if banLevel == BAN_LEVEL3 then
- -- end
- end
- -- web更新封号数据
- function Update_Ban_Info(banStr)
- local banInfo = Json.decode(banStr)
- local banTag, banTime
- local banLevel = BAN_LEVEL1
- -- 禁角色
- if banInfo.roleBanInfo then
- banTime = banInfo.roleBanInfo.banTime
- -- local banTbl = {banInfo.roleBanInfo.channelTag, banInfo.roleBanInfo.serverTag, banInfo.roleBanInfo.roleTag}
- banTag = banInfo.roleBanInfo.roleTag --generateTag(banTbl)
- if banTime > 0 then
- kickPlayerByuuid(banInfo.roleBanInfo.roleTag)
- end
- end
- -- 禁账号
- if banInfo.accountBanInfo then
- banTime = banInfo.roleBanInfo.banTime
- local banTbl = {banInfo.roleBanInfo.channelTag, banInfo.roleBanInfo.accountTag}
- banTag = generateTag(banTbl)
- banLevel = BAN_LEVEL2
- if banTime > 0 then
- kickPlayerByAccount(banInfo.roleBanInfo.accountTag)
- end
- end
- -- 禁设备
- if banInfo.appBanInfo then
- banTag = banInfo.appBanInfo.appId
- banTime = banInfo.roleBanInfo.banTime
- banLevel = BAN_LEVEL3
- end
- if banTag and banTime then
- -- 更新本地缓存
- updateBanListCache(banTag, banTime)
- -- 更新跨服
- Update_CrossServer_BanData(banTag, banTime, banLevel)
- end
- end
- -- 是否被禁止登录
- function CheckBan(uuid, channelId, account, appId)
- local now = os.time()
- if all_ban_list[uuid] and all_ban_list[uuid] > now then
- return true
- end
- local banTag = generateTag({channelId, account})
- if all_ban_list[banTag] and all_ban_list[banTag] > now then
- return true
- end
- if all_ban_list[appId] and all_ban_list[appId] > now then
- return true
- end
- return false
- end
- -------------------------------------------------------------------------------------------
- ------------------------------------------当前服是跨服的处理------------------------------------------
- local function getBanData()
- return CommonDB.getValueByKey(CommonDB.KEY_BAN_DATA)
- end
- local function updateBanData(newData)
- CommonDB.UpdateBanData(CommonDB.KEY_BAN_DATA, newData)
- end
- -- 当前服为跨服, 收到普通服请求封禁数据
- function CS_Get_BanData()
- local banData = getBanData()
- if banData then
- local tMsgData = InnerMsg.wl.WL_QUERY_BAN_INFO
- for k, v in pairs(banData) do
- tMsgData.banList[k] = v
- end
- local fd = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
- InnerMsg.sendMsg(fd, tMsgData)
- end
- end
- -- 当前服为跨服, 收到普通服请求更新封禁数据
- function CS_Update_BanData(msg)
- local banTime = msg.banTime
- local banTag = msg.banTag
- local banLevel = msg.banLevel
- local banData = getBanData()
- banData = banData or {}
- banData[banTag] = banTime
- if banTime == 0 then
- banData[banTag] = nil
- end
- --更新数据库
- updateBanData(banData)
- -- 广播给全部区服
- if banLevel >= BAN_LEVEL2 then
- local tMsgData = InnerMsg.wl.WL_UPDATE_BAN_INFO
- tMsgData.banTag = banTag
- tMsgData.banTime = banTime
- tMsgData.banLevel = banLevel
- local fdList = MiddleManager.MiddleManager_GetAllFD()
- for _, fd in pairs(fdList) do
- pcall(InnerMsg.sendMsg, fd, tMsgData)
- end
- end
- end
- -------------------------------------------------------------------------------------------
|