From f29b503cc8a6ed9b1aa3a7c956e75fd76fc29af5 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 30 五月 2025 11:48:23 +0800 Subject: [PATCH] 15 卡牌服务端搭建 新增接口SendPyPackToServersRoute,从地图发送封包给ServersRoute,可用于GM命令,跨服封包等 GM命令例子GMT_CTG参考 tagGMCommand封包新增ServerID字段 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/ProjSpecialProcess.py | 247 +------------------------------------------------ 1 files changed, 5 insertions(+), 242 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/ProjSpecialProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/ProjSpecialProcess.py index 477a6ee..24c9bd3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/ProjSpecialProcess.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/GMToolLogicProcess/ProjSpecialProcess.py @@ -39,7 +39,8 @@ from Collections import DataServerPlayerData from Collections.CollectionDefine import * from Common import (CommFuncEx, mylog) -from Protocol import MMORPGPack + +from Protocol import (MMORPGPack, RecvPackProtocol, SendPackProtocol, MergeServerRecvProtocol, MergeServerSendProtocol) ################################################################## ####### python逻辑入口 ####### @@ -130,18 +131,6 @@ GMCommandResult(orderId, funcName, GMCommon.Def_GMDBEntranceFail) return - - #test - #转发所有数据库 -# SendDBRequest(CommonDefine.gstGMToolCmdSysDBRequest,OrderLen,OrderId,CmdLen,Cmd) -# SendDBRequest(CommonDefine.gstGMToolCmdLogDBRequest,OrderLen,OrderId,CmdLen,Cmd) -# SendDBRequest(CommonDefine.gstGMToolCmdUserDBRequest,OrderLen,OrderId,CmdLen,Cmd) -# SendLogicProcessRequest(CommonDefine.gstGMToolCmdLogicProcessRequest,OrderLen,OrderId,CmdLen,Cmd) - #转发GameServer - #SendGMToolCommandToGameServer(pack) - - #回复GM工具 - #SendToGMToolCommandResult(OrderLen,OrderId,CmdLen,Cmd,UserDataLen,UserData) #----------------------- mylog.info('ProjSpecialProcess OnGMToolCommand Done') @@ -158,178 +147,8 @@ #返回修改后的包 return pack -################ -# Sys库请求处理 # -################ -## Sys库请求处理 -# @param None -# @return None -def OnGMToolCmdSysDBRequest(sysdb,pack): - mylog.info('ProjSpecialProcess OnGMToolCmdSysDBRequest IN') - #读取封包数据 - recvPack = RecvPackProtocol.tagGMCommandDBRequest() - recvPack.ReadData(pack.getBuffer()) - OrderLen = recvPack.OrderLen - OrderId = recvPack.OrderId - DataLen = recvPack.DataLen - Data = recvPack.Data - #----------------------- - #项目组对自定义请求进行处理 - #----------------------- - - - - #----------------------- - mylog.info('ProjSpecialProcess OnGMToolCmdSysDBRequest Done') - return -################ -# Log库请求处理 # -################ -## Log库请求处理 -# @param None -# @return None -def OnGMToolCmdLogDBRequest(logdb,pack): - mylog.info('ProjSpecialProcess OnGMToolCmdLogDBRequest IN') - #读取封包数据 - recvPack = RecvPackProtocol.tagGMCommandDBRequest() - recvPack.ReadData(pack.getBuffer()) - OrderLen = recvPack.OrderLen - OrderId = recvPack.OrderId - DataLen = recvPack.DataLen - Data = recvPack.Data - #----------------------- - #项目组对自定义请求进行处理 - #----------------------- - # 查询返回 - gmCmdOrderMgr = GetGMOrderMgr() - cmdManger = gmCmdOrderMgr.GetCmd(OrderId) - cmdManger.LogDBRequestResponse(logdb, Data) - #----------------------- - mylog.info('ProjSpecialProcess OnGMToolCmdLogDBRequest Done') - return - - -################ -# User库请求处理 # -################ -## User库请求处理 -# @param None -# @return None -def OnGMToolCmdUserDBRequest(userdb,pack): - mylog.info('ProjSpecialProcess OnGMToolCmdUserDBRequest IN') - #读取封包数据 - recvPack = RecvPackProtocol.tagGMCommandDBRequest() - recvPack.ReadData(pack.getBuffer()) - OrderLen = recvPack.OrderLen - OrderId = recvPack.OrderId - DataLen = recvPack.DataLen - Data = recvPack.Data - #----------------------- - #项目组对自定义请求进行处理 - #----------------------- - - # 查询返回 - gmCmdOrderMgr = GetGMOrderMgr() - cmdManger = gmCmdOrderMgr.GetCmd(OrderId) - execType, execInfo = UpdatePackData(userdb, cmdManger) - # 如果是错误类型直接执行返回结果 - if execType < GMCommon.Def_ResultTypeMax: - cmdManger.GMCmdExecuteResult(execType, execInfo) - return - cmdManger.UserDBRequestResponse(userdb, Data) - #----------------------- - mylog.info('ProjSpecialProcess OnGMToolCmdUserDBRequest Done') - return - -## 更新包数据 -# @param None -# @return None -def UpdatePackData(userdb, gmCmdManger): - - # 个人补偿GM工具 - # 由于GameServer处理多个玩家补偿同一物品时只收一次命令包处理(只插入一条物品数据) - # 故此处先查出多个玩家账号/昵称对应的playerID,更改命令字典信息后,压入包,再推给GameServer - if gmCmdManger.funcName in ["GMT_AddPersonalCompensation", "GMT_CompensationQueryPersonal"]: - gmCmdDict = gmCmdManger.gmCmdDict - playerList = gmCmdDict.get("playerList", '') - playerList = playerList.split(",") - - if not playerList: - return GMCommon.Def_ParamErr, '' - - playerIDList = [] - queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '') - if queryType == GMCommon.Def_GMKey_FamilyID: - # 根据家族ID的不处理,直接推 - return GMCommon.Def_SendToGameServer, "" - - playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '') - - for playerFind in playerList: - playerAccID = "" - # 玩家姓名 - if queryType == GMCommon.Def_GMKey_PlayerName: - playerAccID = GMCommon.GetPlayerAccID(userdb, {'PlayerName':fix_incomingText(playerFind), 'IsDeleted':0}) - - elif queryType == GMCommon.Def_GMKey_PlayerAccID: - playerAccID = GMCommon.GetPlayerAccID(userdb, {'AccID':fix_incomingText(playerFind), 'IsDeleted':0}) - - if playerAccID == '': - return GMCommon.Def_NoTag, "%s can not found!" % str(playerFind) - - collection = userdb[UCN_DBPlayer] - dbPlayer = DataServerPlayerData.tagDBPlayer() - dbPlayer.IsDeleted = 0 - - loadOK = dbPlayer.adoLoadCEx(collection, {'AccID':fix_incomingText(playerAccID), - 'IsDeleted':dbPlayer.IsDeleted}) - if not loadOK: - return GMCommon.Def_NoTag, "%s can not found!" % str(playerFind) - - playerIDList.append(dbPlayer.PlayerID) - - gmCmdManger.gmCmdDictUnEncode["PlayerIDList"] = str(playerIDList) - - updatePack = RecvPackProtocol.tagGMCommand() - updatePack.OrderId = str(gmCmdManger.orderId) - updatePack.OrderLen = len(updatePack.OrderId) - updatePack.Cmd = str(gmCmdManger.gmCmdDictUnEncode) - updatePack.CmdLen = len(updatePack.Cmd) - updatePack.UserData = str(gmCmdManger.userData) - updatePack.UserDataLen = len(updatePack.UserData) - - # 更新pack数据 - # mmoRPGPack = MMORPGPack.MMORPGPacket() - # mmoRPGPack.setBuffer(updatePack.GetBuffer()) - # gmCmdManger.pack = mmoRPGPack - - return GMCommon.Def_SendToGameServer, "" - - -################ -#逻辑线程请求处理 # -################ -## 逻辑线程请求处理 -# @param None -# @return None -def OnGMToolCmdLogicProcessRequest(pack): - mylog.info('ProjSpecialProcess OnGMToolCmdLogicProcessRequest IN') - #读取封包数据 - recvPack = RecvPackProtocol.tagGMCommandDBRequest() - recvPack.ReadData(pack.getBuffer()) - OrderLen = recvPack.OrderLen - OrderId = recvPack.OrderId - DataLen = recvPack.DataLen - Data = recvPack.Data - #----------------------- - #项目组对自定义请求进行处理 - #----------------------- - - #----------------------- - mylog.info('ProjSpecialProcess OnGMToolCmdLogicProcessRequest Done') - return ################################################################## @@ -370,66 +189,10 @@ if callFunc != None: execType, execInfo = callFunc(self.gmCmdDict) - # 执行结果处理 - self.GMCmdExecuteResult(execType, execInfo) + GetGMOrderMgr().PopCmd(self.orderId) + GMCommandResult(self.orderId, self.funcName, execType, execInfo) - ## 查询logdb - # @param self - # @param logdb - # @param data:自定义数据 - # @return None - def LogDBRequestResponse(self, logdb, data): - callFunc = GetExecFunc(Commands, "%s.%s"%(self.funcName, "LogDBResponse")) - - execType = GMCommon.Def_GMCmdNone - execInfo = '' - if callFunc != None: - execType, execInfo = callFunc(logdb, data, self.gmCmdDict) - - # 执行结果处理 - self.GMCmdExecuteResult(execType, execInfo) - - ## 查询userdb - # @param self - # @param userdb - # @param data:自定义数据 - # @return None - def UserDBRequestResponse(self, userdb, data): - callFunc = GetExecFunc(Commands, "%s.%s"%(self.funcName, "UserDBResponse")) - - execType = GMCommon.Def_GMCmdNone - execInfo = '' - if callFunc != None: - execType, execInfo = callFunc(userdb, data, self.gmCmdDict) - - # 执行结果处理 - self.GMCmdExecuteResult(execType, execInfo) - ## 执行返回结果处理 - # @param self - # @param execType:操作类型 - # @param execInfo:自定义数据 - # @return None - def GMCmdExecuteResult(self, execType, execInfo): - - if execType == GMCommon.Def_DoQueryLogDB: - SendDBRequest(CommonDefine.gstGMToolCmdLogDBRequest, - len(self.orderId), self.orderId, len(execInfo), execInfo) - - elif execType == GMCommon.Def_DoQueryUserDB: - SendDBRequest(CommonDefine.gstGMToolCmdUserDBRequest, - len(self.orderId), self.orderId, len(execInfo), execInfo) - - elif execType == GMCommon.Def_SendToGameServer: - SendGMToolCommandToGameServer(self.pack) - # 删除改gm命令 - GetGMOrderMgr().PopCmd(self.orderId) - - else: - #gm命令回复, 删除改gm命令 - GetGMOrderMgr().PopCmd(self.orderId) - GMCommandResult(self.orderId, self.funcName, execType, execInfo) - return ## gm命令管理 # @@ -535,7 +298,7 @@ resultMsg = json.dumps(resultDcit, ensure_ascii=False) mylog.info("gm result:%s"%resultMsg) - SendToGMToolCommandResult(len(orderId), orderId, len(resultMsg), resultMsg, len(useData), useData) + SendToGMToolCommandResult(orderId, resultMsg) return -- Gitblit v1.8.0