|
|
@@ -1,3 +1,4 @@
|
|
|
+--封号逻辑
|
|
|
local Config = require("Config")
|
|
|
Json = Json or require("common.Json")
|
|
|
local InnerMsg = require("core.InnerMsg")
|
|
|
@@ -14,9 +15,6 @@ local BAN_LEVEL3 = 3 --禁设备
|
|
|
|
|
|
|
|
|
------------------------------------------当前服是普通服的处理------------------------------------------
|
|
|
--- 缓存的禁止登录信息列表
|
|
|
-local all_ban_list = {}
|
|
|
-
|
|
|
local function generateTag(args)
|
|
|
local strTag = ""
|
|
|
for _, str in ipairs(args) do
|
|
|
@@ -29,33 +27,35 @@ local function generateTag(args)
|
|
|
return strTag
|
|
|
end
|
|
|
|
|
|
+-- 获取本服缓存的封禁数据
|
|
|
+local function getBanCache()
|
|
|
+ return CommonDB.GetBanCache()
|
|
|
+end
|
|
|
+
|
|
|
+-- 更新本服缓存的封禁数据
|
|
|
+local function updateBanCache(banTag, banTime)
|
|
|
+ CommonDB.UpdateBanCache(banTag, banTime)
|
|
|
+end
|
|
|
+
|
|
|
|
|
|
local function isSame(str, account)
|
|
|
local t = Util.split(str, "|")
|
|
|
account = tostring(account)
|
|
|
-
|
|
|
- if t[2] == account then
|
|
|
+ if t[3] == 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
|
|
|
+ local fd = ObjHuman.onlineUuid[uuid].fd
|
|
|
ObjHuman.doDisconnect(ObjHuman.onlineUuid[uuid], CommonDefine.DISCONNECT_BAN_ROLE)
|
|
|
|
|
|
local Handler = require("scene.Handler")
|
|
|
- Handler.sendDisconnect(ObjHuman.onlineUuid[uuid].fd, CommonDefine.DISCONNECT_BAN_ROLE)
|
|
|
+ Handler.sendDisconnect(fd, CommonDefine.DISCONNECT_BAN_ROLE)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
@@ -63,9 +63,10 @@ end
|
|
|
local function kickPlayerByAccount(account)
|
|
|
for uTag, h in pairs(ObjHuman.onlineNewUniqueTag) do
|
|
|
if isSame(uTag, account) then
|
|
|
+ local fd = h.fd
|
|
|
ObjHuman.doDisconnect(h, CommonDefine.DISCONNECT_BANUSER)
|
|
|
local Handler = require("scene.Handler")
|
|
|
- Handler.sendDisconnect(h.fd, CommonDefine.DISCONNECT_BANUSER)
|
|
|
+ Handler.sendDisconnect(fd, CommonDefine.DISCONNECT_BANUSER)
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
@@ -82,96 +83,87 @@ end
|
|
|
-- 收到跨服推送的封禁数据
|
|
|
function NS_Init_BanData(banList)
|
|
|
for k ,v in pairs(banList) do
|
|
|
- updateBanListCache(k, v)
|
|
|
+ print("===========NS_Init_BanData============", k,v)
|
|
|
+ updateBanCache(k, v)
|
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
-- 通知跨服更新封禁数据
|
|
|
-function Update_CrossServer_BanData(banTag, banTime, banLevel)
|
|
|
+function Update_CrossServer_BanData(banStr)
|
|
|
local tMsgData = InnerMsg.lw.LW_UPDATE_BAN_INFO
|
|
|
tMsgData.nSrcServerID = Config.SVR_INDEX
|
|
|
- tMsgData.banTag = banTag
|
|
|
- tMsgData.banTime = banTime
|
|
|
- tMsgData.banLevel = banLevel
|
|
|
+ tMsgData.banStr = banStr
|
|
|
|
|
|
InnerMsg.sendMsg(0, tMsgData)
|
|
|
end
|
|
|
|
|
|
-- 收到跨服推送的要更新的封禁数据
|
|
|
-function NS_Update_BanData(banTag, banTime, banLevel)
|
|
|
- updateBanListCache(banTag, banTime)
|
|
|
+function NS_Update_BanData(banStr)
|
|
|
+ print("============NS_Update_BanData==============", banStr)
|
|
|
+ local banInfo = Json.Decode(banStr)
|
|
|
+
|
|
|
+ -- 禁账号
|
|
|
+ if banInfo.accountBanInfo then
|
|
|
+ local banTime = banInfo.accountBanInfo.banTime
|
|
|
+ local banTbl = {banInfo.accountBanInfo.channelTag, banInfo.accountBanInfo.accountTag}
|
|
|
+ local banTag = generateTag(banTbl)
|
|
|
+
|
|
|
+ if banTime > 0 then
|
|
|
+ kickPlayerByAccount(banInfo.accountBanInfo.accountTag)
|
|
|
+ end
|
|
|
+
|
|
|
+ updateBanCache(banTag, banTime)
|
|
|
+ end
|
|
|
|
|
|
- --踢对应账号玩家下线
|
|
|
- if banLevel == BAN_LEVEL2 then
|
|
|
- local tbl = Util.split(banTag, "|")
|
|
|
- kickPlayerByAccount(tbl[2])
|
|
|
+
|
|
|
+ -- 禁设备
|
|
|
+ if banInfo.appBanInfo then
|
|
|
+ updateBanCache(banInfo.appBanInfo.appId, banInfo.appBanInfo.banTime)
|
|
|
end
|
|
|
|
|
|
- -- 根据设备踢人
|
|
|
- -- if banLevel == BAN_LEVEL3 then
|
|
|
- -- end
|
|
|
end
|
|
|
|
|
|
|
|
|
--- web更新封号数据
|
|
|
+-- Web请求普通游戏服更新封号数据
|
|
|
function Update_Ban_Info(banStr)
|
|
|
- local banInfo = Json.decode(banStr)
|
|
|
- local banTag, banTime
|
|
|
- local banLevel = BAN_LEVEL1
|
|
|
+ local banInfo = Json.Decode(banStr)
|
|
|
|
|
|
-- 禁角色
|
|
|
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)
|
|
|
+ local banTime = banInfo.roleBanInfo.banTime
|
|
|
+ local banTag = banInfo.roleBanInfo.roleTag
|
|
|
|
|
|
- if banTime > 0 then
|
|
|
- kickPlayerByuuid(banInfo.roleBanInfo.roleTag)
|
|
|
+ if banTime > 0 then
|
|
|
+ kickPlayerByuuid(banTag)
|
|
|
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
|
|
|
+ -- 更新本地
|
|
|
+ updateBanCache(banTag, banTime)
|
|
|
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
|
|
|
+ Update_CrossServer_BanData(banStr)
|
|
|
end
|
|
|
|
|
|
-- 是否被禁止登录
|
|
|
function CheckBan(uuid, channelId, account, appId)
|
|
|
+ print("=============CheckBan0============")
|
|
|
+ local banListCache = getBanCache()
|
|
|
+ for k ,v in pairs(banListCache) do
|
|
|
+ print("=============CheckBan1============", k,v)
|
|
|
+ end
|
|
|
+
|
|
|
local now = os.time()
|
|
|
- if all_ban_list[uuid] and all_ban_list[uuid] > now then
|
|
|
+ if banListCache[uuid] and banListCache[uuid] > now then
|
|
|
return true
|
|
|
end
|
|
|
|
|
|
local banTag = generateTag({channelId, account})
|
|
|
- if all_ban_list[banTag] and all_ban_list[banTag] > now then
|
|
|
+ if banListCache[banTag] and banListCache[banTag] > now then
|
|
|
return true
|
|
|
end
|
|
|
|
|
|
- if all_ban_list[appId] and all_ban_list[appId] > now then
|
|
|
+ if banListCache[appId] and banListCache[appId] > now then
|
|
|
return true
|
|
|
end
|
|
|
return false
|
|
|
@@ -192,15 +184,16 @@ local function getBanData()
|
|
|
end
|
|
|
|
|
|
local function updateBanData(newData)
|
|
|
- CommonDB.UpdateBanData(CommonDB.KEY_BAN_DATA, newData)
|
|
|
+ CommonDB.UpdateBanData(newData)
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--- 当前服为跨服, 收到普通服请求封禁数据
|
|
|
-function CS_Get_BanData()
|
|
|
+-- 当前服为跨服, 收到普通服请求获取封禁数据
|
|
|
+function CS_Get_BanData(msg)
|
|
|
local banData = getBanData()
|
|
|
|
|
|
+ print("=============CS_Get_BanData============", type(banData))
|
|
|
if banData then
|
|
|
local tMsgData = InnerMsg.wl.WL_QUERY_BAN_INFO
|
|
|
|
|
|
@@ -215,28 +208,60 @@ function CS_Get_BanData()
|
|
|
end
|
|
|
|
|
|
-- 当前服为跨服, 收到普通服请求更新封禁数据
|
|
|
-function CS_Update_BanData(msg)
|
|
|
- local banTime = msg.banTime
|
|
|
- local banTag = msg.banTag
|
|
|
- local banLevel = msg.banLevel
|
|
|
+function CS_Update_BanData(banStr)
|
|
|
+ print("============CS_Update_BanData==============", banStr)
|
|
|
+ local banTag, banTime
|
|
|
+ local banInfo = Json.Decode(banStr)
|
|
|
|
|
|
local banData = getBanData()
|
|
|
banData = banData or {}
|
|
|
|
|
|
- banData[banTag] = banTime
|
|
|
- if banTime == 0 then
|
|
|
- banData[banTag] = nil
|
|
|
+ -- 禁角色
|
|
|
+ if banInfo.roleBanInfo then
|
|
|
+ banTag = banInfo.roleBanInfo.roleTag
|
|
|
+ banTime = banInfo.roleBanInfo.banTime
|
|
|
+
|
|
|
+ banData[banTag] = banTime
|
|
|
+ if banTime == 0 then
|
|
|
+ banData[banTag] = nil
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+ -- 禁账号
|
|
|
+ if banInfo.accountBanInfo then
|
|
|
+ banTime = banInfo.accountBanInfo.banTime
|
|
|
+ local banTbl = {banInfo.accountBanInfo.channelTag, banInfo.accountBanInfo.accountTag}
|
|
|
+ banTag = generateTag(banTbl)
|
|
|
+
|
|
|
+ banData[banTag] = banTime
|
|
|
+ if banTime == 0 then
|
|
|
+ banData[banTag] = nil
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+
|
|
|
+ -- 禁设备
|
|
|
+ if banInfo.appBanInfo then
|
|
|
+ banTag = banInfo.appBanInfo.appId
|
|
|
+ banTime = banInfo.appBanInfo.banTime
|
|
|
+
|
|
|
+ banData[banTag] = banTime
|
|
|
+ if banTime == 0 then
|
|
|
+ banData[banTag] = nil
|
|
|
+ end
|
|
|
end
|
|
|
|
|
|
--更新数据库
|
|
|
updateBanData(banData)
|
|
|
|
|
|
-- 广播给全部区服
|
|
|
- if banLevel >= BAN_LEVEL2 then
|
|
|
+ if banInfo.accountBanInfo or banInfo.appBanInfo then
|
|
|
+ banInfo.roleBanInfo = nil
|
|
|
+ banStr = Json.Encode(banInfo)
|
|
|
+
|
|
|
local tMsgData = InnerMsg.wl.WL_UPDATE_BAN_INFO
|
|
|
- tMsgData.banTag = banTag
|
|
|
- tMsgData.banTime = banTime
|
|
|
- tMsgData.banLevel = banLevel
|
|
|
+ tMsgData.banStr = banStr
|
|
|
|
|
|
local fdList = MiddleManager.MiddleManager_GetAllFD()
|
|
|
for _, fd in pairs(fdList) do
|