Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode
| | |
| | | def SendGameServerGeneralPack(self, *args): return _IPY_GameWorld1.IPY_GameWorld_SendGameServerGeneralPack(self, *args)
|
| | | def CreateMirrorPlayer(self, *args): return _IPY_GameWorld1.IPY_GameWorld_CreateMirrorPlayer(self, *args)
|
| | | def SendPyPackToMapServerSelf(self, *args): return _IPY_GameWorld1.IPY_GameWorld_SendPyPackToMapServerSelf(self, *args)
|
| | | def SendPyPackToServersRoute(self, *args): return _IPY_GameWorld1.IPY_GameWorld_SendPyPackToServersRoute(self, *args)
|
| | | IPY_GameWorld_swigregister = _IPY_GameWorld1.IPY_GameWorld_swigregister
|
| | | IPY_GameWorld_swigregister(IPY_GameWorld)
|
| | |
|
| | |
| | | mssCError = _IPY_PlayerDefine.mssCError
|
| | | mssDisconnect = _IPY_PlayerDefine.mssDisconnect
|
| | | mssCppWarn = _IPY_PlayerDefine.mssCppWarn
|
| | | mssRestart = _IPY_PlayerDefine.mssRestart
|
| | | mssMax = _IPY_PlayerDefine.mssMax
|
| | | gmForbidFight = _IPY_PlayerDefine.gmForbidFight
|
| | | gmForbidAcc = _IPY_PlayerDefine.gmForbidAcc
|
| | |
| | | mgSavePlayerDataResult = _IPY_ServerDefine.mgSavePlayerDataResult
|
| | | mgCashResultAnswer = _IPY_ServerDefine.mgCashResultAnswer
|
| | | mgState = _IPY_ServerDefine.mgState
|
| | | mgMapPreClose = _IPY_ServerDefine.mgMapPreClose
|
| | | bgPlayerTotal = _IPY_ServerDefine.bgPlayerTotal
|
| | | bgRegisterLineNO = _IPY_ServerDefine.bgRegisterLineNO
|
| | | bgPlayerCreateRole = _IPY_ServerDefine.bgPlayerCreateRole
|
| | |
| | | gstMergePlayerData = _IPY_ServerDefine.gstMergePlayerData
|
| | | gstDBLogic = _IPY_ServerDefine.gstDBLogic
|
| | | gstQueryServerIDInfo = _IPY_ServerDefine.gstQueryServerIDInfo
|
| | | gstNotifyCloseServer = _IPY_ServerDefine.gstNotifyCloseServer
|
| | | gstMax = _IPY_ServerDefine.gstMax
|
| | | btgServerSupport = _IPY_ServerDefine.btgServerSupport
|
| | | btgLineID = _IPY_ServerDefine.btgLineID
|
| | |
| | | def SendPyPackToMapServerSelf(data, datalen):
|
| | | GameWorld.GetGameWorld().SendPyPackToMapServerSelf(datalen, data)
|
| | | return
|
| | |
|
| | |
|
| | |
|
| | | # 向ServersRoute发送数据
|
| | | def SendPyPackToServersRoute(data, datalen):
|
| | | GameWorld.GetGameWorld().SendPyPackToServersRoute(datalen, data)
|
| | | return |
| | |
| | | #导入
|
| | | import GMCommon
|
| | | from MangoDBCommon import fix_incomingText
|
| | | import GameWorld
|
| | | from Player import (PlayerControl, PlayerCoin)
|
| | | import IpyGameDataPY
|
| | | import IPY_GameWorld
|
| | | import ShareDefine
|
| | | import DataRecordPack
|
| | | import ChConfig
|
| | | from PyMongoDB.GMToolLogicProcess import GMToolPyInterface
|
| | | import json
|
| | | #---------------------------------------------------------------------
|
| | | #全局变量
|
| | |
|
| | |
| | | def OnExec(gmCmdDict):
|
| | | queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
| | | playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
|
| | | #value = gmCmdDict.get('value', '')
|
| | | Result = GMCommon.Def_ParamErr
|
| | | errorMsg = ""
|
| | |
|
| | | if queryType not in [GMCommon.Def_GMKey_PlayerAccID, GMCommon.Def_GMKey_PlayerName]:
|
| | | return GMCommon.Def_ParamErr, ''
|
| | | return Result, errorMsg
|
| | |
|
| | | if len(playerFind) <= 0:
|
| | | return GMCommon.Def_ParamErr, ''
|
| | | return Result, errorMsg
|
| | |
|
| | | return GMCommon.Def_DoQueryUserDB, ''
|
| | | |
| | | |
| | | ## 查询logdb返回
|
| | | # @param logdb:logdb
|
| | | # @param data:传入的信息
|
| | | # @param gmCmdDict:gm命令字典
|
| | | # @return None |
| | | def LogDBResponse(logdb, data, gmCmdDict):
|
| | | if data == "":
|
| | | return GMCommon.Def_DoQueryUserDB, ''
|
| | | # 修改为离线可用
|
| | | return GMCommon.Def_SendToGameServer, ''
|
| | | # if GMCommon.GetPlayerOnLineByAccID(logdb, data):
|
| | | # return GMCommon.Def_SendToGameServer, ''
|
| | | # |
| | | # return GMCommon.Def_PlayerOfLine, ''
|
| | |
|
| | |
|
| | | ## 查询userdb返回
|
| | | # @param userdb:userdb
|
| | | # @param data:传入的信息
|
| | | # @param gmCmdDict:gm命令字典
|
| | | # @return None |
| | | def UserDBResponse(userdb, data, gmCmdDict):
|
| | | queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
| | | playerFind = gmCmdDict.get(GMCommon.Def_GMKey_PlayerFind, '')
|
| | | |
| | | playerAccID = ""
|
| | | # 玩家姓名
|
| | | curPlayer = None
|
| | | if queryType == GMCommon.Def_GMKey_PlayerName:
|
| | | playerAccID = GMCommon.GetPlayerAccID(userdb, {'PlayerName':fix_incomingText(playerFind), 'IsDeleted':0})
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByName(playerFind)
|
| | | else:
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByAccID(playerFind)
|
| | |
|
| | | elif queryType == GMCommon.Def_GMKey_PlayerAccID:
|
| | | playerAccID = GMCommon.GetPlayerAccID(userdb, {'AccID':fix_incomingText(playerFind), 'IsDeleted':0})
|
| | | if not curPlayer or curPlayer.IsEmpty():
|
| | | Result = GMCommon.Def_Success
|
| | | # 不在线
|
| | | return Result, errorMsg
|
| | |
|
| | | if playerAccID == '':
|
| | | return GMCommon.Def_NoTag, ''
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | return GMCommon.Def_DoQueryLogDB, playerAccID
|
| | | Result = GMCommon.Def_Unknow
|
| | |
|
| | | value = gmCmdDict.get('value', '')
|
| | | appID = gmCmdDict.get('appID', '')
|
| | | isAddBourseMoney = GameWorld.ToIntDef(gmCmdDict.get('isAddBourseMoney', ''), 0)
|
| | | |
| | | goldBefore = PlayerControl.GetMoneyReal(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money)
|
| | | changeCoinPointBefore = curPlayer.GetChangeCoinPointTotal()
|
| | | bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
| | |
|
| | |
|
| | | orderInfoIpyData = None
|
| | | if appID:
|
| | | orderInfoIpyData = IpyGameDataPY.GetIpyGameDataNotLog("OrderInfo", value, appID)
|
| | | if not orderInfoIpyData:
|
| | | Result = GMCommon.Def_ParamErr
|
| | | errorMsg = "Can not found the orderInfo(%s) and appID(%s)!" % (value, appID)
|
| | |
|
| | | if errorMsg:
|
| | | return Result, errorMsg
|
| | | |
| | | orderRMB = GameWorld.ToNumDef(value, None)
|
| | | if not orderInfoIpyData and orderRMB != None:
|
| | | if PlayerCoin.PlayerCoinToGoldEx(curPlayer, orderRMB, ChConfig.Def_GiveMoney_GMTCTG, isAddBourseMoney):
|
| | | Result = GMCommon.Def_Success |
| | | else:
|
| | | errorMsg = "order error! value(%s)" % (value) |
| | | else:
|
| | | orderInfo = value
|
| | | if PlayerCoin.DoGMCTG(curPlayer, orderInfo, appID, isAddBourseMoney, ChConfig.Def_GiveMoney_GMTCTG):
|
| | | Result = GMCommon.Def_Success
|
| | | else:
|
| | | errorMsg = "orderInfo error! appID(%s), value(%s)" % (appID, value)
|
| | | |
| | | if Result != GMCommon.Def_Success:
|
| | | return Result, errorMsg
|
| | | |
| | | goldAfter = PlayerControl.GetMoneyReal(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money)
|
| | | changeCoinPointAfter = curPlayer.GetChangeCoinPointTotal()
|
| | | bourseMoneyAfter = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
| | | |
| | | resultDict = {"value":value, "appID":appID, "isAddBourseMoney":isAddBourseMoney, "Result":Result, |
| | | "gold":[goldBefore, goldAfter], "changeCoinPoint":[changeCoinPointBefore, changeCoinPointAfter], |
| | | "bourseMoney":[bourseMoneyBefore, bourseMoneyAfter]}
|
| | | |
| | | #流向 增加金额记录
|
| | | DataRecordPack.DR_ToolGMOperate(playerID, curPlayer.GetPlayerName(), curPlayer.GetAccID(), 'GMT_CTG', resultDict)
|
| | | |
| | | return Result, resultDict
|
| | |
|
| | |
|
| | |
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | from Protocol import (MMORPGPack,RecvPackProtocol, SendPackProtocol)
|
| | | from Common import (CommFunc, mylog)
|
| | |
|
| | | # from DBCommon import (CommonDefine,SingletonObject)
|
| | | # import GMToolCommandMgr
|
| | | # g_GMCMDMgr = GMToolCommandMgr.GetGMOrderMgr()
|
| | |
|
| | | from Protocol import SendPackProtocol
|
| | | from Common import mylog
|
| | | from DBCommon import CommonDefine
|
| | | import NetPackCommon
|
| | | from Commands import GMCommon
|
| | | import json
|
| | | ##################################################################
|
| | | ####### 提供的接口 ######
|
| | | #转发GM工具命令包到GameServer |
| | | def SendGMToolCommandToGameServer(pack):
|
| | | # global g_GMCMDMgr
|
| | |
|
| | | # recvPack = RecvPackProtocol.tagGMCommand()
|
| | | # recvPack.ReadData(pack.getBuffer())
|
| | | # recvPack.Type = CommonDefine.bgDBGMCommand
|
| | |
|
| | | # mylog.info('ProjSpecialProcess SendGMToolCommandToGameServer OrderId = %s'%recvPack.OrderId)
|
| | | |
| | | # ServerMgr = MongoDBServer.getServerMgr()
|
| | | # sendViaSessionID = ServerMgr.getClientSessionIDByName("CenterGate",0)
|
| | | |
| | | # SessionID = 0
|
| | | # PoolIndex = -1
|
| | | # mylog.info('ProjSpecialProcess SendGMToolCommandToGameServer sendViaSessionID = %s,SessionID = %d,PoolIndex = %d'%(
|
| | | # sendViaSessionID,
|
| | | # SessionID,
|
| | | # PoolIndex))
|
| | | # ServerMgr.packSendBySessionID(sendViaSessionID, SessionID, PoolIndex,
|
| | | # CommonDefine.atInner,
|
| | | # MMORPGPack.stGame, MMORPGPack.stData, |
| | | # recvPack.GetBuffer())
|
| | | mylog.info('ProjSpecialProcess SendGMToolCommandToGameServer Done') |
| | | |
| | | #回复GM工具命令执行结果包
|
| | | def SendToGMToolCommandResult(OrderLen,OrderId,ResultLen,Result,UserDataLen,UserData):
|
| | | # global g_GMCMDMgr
|
| | | #回复给ServersRoute->GM工具 命令执行结果包
|
| | | def SendToGMToolCommandResult(orderID, resultMsg, UserData = ''):
|
| | | # if isinstance(Result, unicode):
|
| | | # #直接从数据库未进行转化的话是unicode
|
| | | # Result = Result.encode('gbk')
|
| | |
|
| | | # mylog.info('ProjSpecialProcess SendToGMToolCommandResult OrderId = %s'%OrderId) |
| | | # recvPack = SendPackProtocol.tagGMCommandResult()
|
| | | # recvPack.Type = CommonDefine.gstGMToolCommandResult |
| | | # recvPack.OrderLen = OrderLen
|
| | | # recvPack.OrderId = OrderId
|
| | | # recvPack.ResultLen = ResultLen
|
| | | # recvPack.Result = Result
|
| | | # recvPack.UserDataLen = UserDataLen
|
| | | # recvPack.UserData = UserData
|
| | | recvPack = SendPackProtocol.tagGMCommandResult()
|
| | | recvPack.Type = CommonDefine.gstGMToolCommandResult |
| | | recvPack.OrderLen = len(orderID)
|
| | | recvPack.OrderId = orderID
|
| | | recvPack.ResultLen = len(resultMsg)
|
| | | recvPack.Result = resultMsg
|
| | | recvPack.UserDataLen = len(UserData)
|
| | | recvPack.UserData = UserData
|
| | |
|
| | | NetPackCommon.SendPyPackToServersRoute(recvPack.GetBuffer(), recvPack.GetLength())
|
| | | mylog.info('ProjSpecialProcess SendToGMToolCommandResult OrderId = %s'%orderID) |
| | |
|
| | |
|
| | | # sendViaSessionID = g_GMCMDMgr.PopPair(recvPack.OrderId)
|
| | | # ServerMgr = MongoDBServer.getServerMgr() |
| | | |
| | | # SessionID = 0
|
| | | # PoolIndex = -1
|
| | | # mylog.info('ProjSpecialProcess SendToGMToolCommandResult sendViaSessionID = %s,SessionID = %d,PoolIndex = %d'%(sendViaSessionID, SessionID,PoolIndex))
|
| | | # if sendViaSessionID == '':
|
| | | # mylog.warning('ProjSpecialProcess SendToGMToolCommandResult Fail, No Client in GMToolPort')
|
| | | # return
|
| | | |
| | | # ServerMgr.packSendBySessionID(sendViaSessionID, SessionID, PoolIndex,
|
| | | # CommonDefine.atInner,
|
| | | # MMORPGPack.stGMTool, MMORPGPack.stData, |
| | | # recvPack.GetBuffer())
|
| | | mylog.info('ProjSpecialProcess SendToGMToolCommandResult Done') |
| | | |
| | | #发送数据库请求
|
| | | def SendDBRequest(Type,OrderLen,OrderId,DataLen,Data):
|
| | | #Type说明
|
| | | #CommonDefine.gstGMToolCmdSysDBRequest #GM工具SysCtrlDB请求类型 |
| | | #CommonDefine.gstGMToolCmdLogDBRequest #GM工具LogCtrlDB请求类型 |
| | | #CommonDefine.gstGMToolCmdUserDBRequest #GM工具UserCtrlDB请求类型
|
| | | |
| | |
|
| | | # #构建请求包
|
| | | # pack = RecvPackProtocol.tagGMCommandDBRequest()
|
| | | # pack.Type = Type
|
| | | # pack.OrderLen = OrderLen
|
| | | # pack.OrderId = OrderId
|
| | | # pack.DataLen = DataLen
|
| | | # pack.Data = Data
|
| | | # #发请求包
|
| | | # sendPack = SingletonObject.getPackPool().alloc()
|
| | | # sendPack.setSendViaSocketID(-1)
|
| | | # sendPack.getPackHead().sessionID = 0
|
| | | # sendPack.getPackHead().poolIndex = -1
|
| | | # sendPack.getPackHead().type = CommonDefine.atInner
|
| | | # sendPack.setBuffer(pack.GetBuffer())
|
| | | # ctrlDBMgr = CtrlDBManager.getCtrlMgr()
|
| | | # ctrlDBMgr.dbRequestPush(sendPack)
|
| | | # mylog.info('ProjSpecialProcess SendDBRequest Done ,Type = %s, OrderId = %s'%(Type,OrderId)) |
| | | return True
|
| | |
|
| | | #发送逻辑处理请求
|
| | | def SendLogicProcessRequest(Type,OrderLen,OrderId,DataLen,Data):
|
| | | #Type说明
|
| | | #CommonDefine.gstGMToolCmdLogicProcessRequest #GM工具Logic请求类型
|
| | | #构建请求包
|
| | | # pack = RecvPackProtocol.tagGMCommandDBRequest()
|
| | | # pack.Type = Type
|
| | | # pack.OrderLen = OrderLen
|
| | | # pack.OrderId = OrderId
|
| | | # pack.DataLen = DataLen
|
| | | # pack.Data = Data
|
| | | # #发请求包
|
| | | # sendPack = SingletonObject.getPackPool().alloc()
|
| | | # sendPack.setSendViaSocketID(-1)
|
| | | # sendPack.getPackHead().sessionID = 0
|
| | | # sendPack.getPackHead().poolIndex = -1
|
| | | # sendPack.getPackHead().type = CommonDefine.atInner
|
| | | # sendPack.setBuffer(pack.GetBuffer())
|
| | | |
| | | # logicProcess = GlobalVarDefine.g_logicProcessThread
|
| | | # if logicProcess == None:
|
| | | # mylog.warning('ProjSpecialProcess SendLogicProcessRequest Fail!!! logicProcessThread == None??')
|
| | | # return False
|
| | | # logicProcess.requestPush(sendPack)
|
| | | # mylog.info('ProjSpecialProcess SendLogicProcessRequest Done ,Type = %s, OrderId = %s'%(Type,OrderId)) |
| | | return True
|
| | |
|
| | |
|
| | | ################################################################## |
| | |
| | | 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逻辑入口 #######
|
| | |
| | | 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')
|
| | | return
|
| | |
| | | #返回修改后的包
|
| | | 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
|
| | |
|
| | | ##################################################################
|
| | |
|
| | |
| | | if callFunc != None:
|
| | | execType, execInfo = callFunc(self.gmCmdDict)
|
| | |
|
| | | # 执行结果处理
|
| | | self.GMCmdExecuteResult(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命令管理
|
| | | #
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | import inspect
|
| | | from Collections.CollectionDefine import *
|
| | | import binascii
|
| | | # from GMToolLogicProcess import ProjSpecialProcess
|
| | | from GMToolLogicProcess import ProjSpecialProcess
|
| | | from Common import (CommFunc, mylog, CommFuncEx)
|
| | | import PegasusCollectorProxy
|
| | | import shutil
|
| | |
| | |
|
| | | mylog.debug("begin process request type = %d"%requestType)
|
| | |
|
| | | if requestType == CommonDefine.gstGMToolCommand:
|
| | | oFuncGrade = self.GetFuncGrade('gstGMToolCommand')
|
| | | oFuncGrade.Start()
|
| | | self.OnGMToolCommand(db, pack)
|
| | | oFuncGrade.End()
|
| | | return True
|
| | |
|
| | |
|
| | | if requestType == CommonDefine.gstGeneralDBOper:
|
| | | oFuncGrade = self.GetFuncGrade('gstGeneralDBOper')
|
| | | oFuncGrade.Start()
|
| | |
| | | oFuncGrade.End()
|
| | | return True
|
| | |
|
| | | if requestType == CommonDefine.gstGMToolCmdUserDBRequest:
|
| | | oFuncGrade = self.GetFuncGrade("gstGMToolCmdUserDBRequest")
|
| | | oFuncGrade.Start() |
| | | self.OnGMToolCmdUserDBRequest(db, pack) |
| | | oFuncGrade.End() |
| | | return True
|
| | |
|
| | | if requestType == CommonDefine.gstMergerChildToCenter:
|
| | | oFuncGrade = self.GetFuncGrade("gstMergerChildToCenter")
|
| | | oFuncGrade.Start()
|
| | |
| | | sendPack.ErrMsgLen = len(sendPack.ErrMsg)
|
| | | self.packSend(sessionID, 0, 0, CommonDefine.atMergeLogic, MMORPGPack.stGame,
|
| | | MMORPGPack.stData, sendPack.GetBuffer())
|
| | | |
| | |
|
| | | def OnGMToolCommand(self, db, pack):
|
| | |
|
| | | if CommonDefine.IsDebug():
|
| | | import binascii
|
| | | mylog.debug('buf = %s'%binascii.b2a_hex(pack.getBuffer()))
|
| | | |
| | | try:
|
| | | ProjSpecialProcess.OnGMToolCommand(pack)
|
| | | except:
|
| | | msg = error.formatMsg('error', error.ERROR_NO_172, "LogicProcessThread::OnGMToolCommand Catch a unexpetcted exception, error = %s"%traceback.format_exc())
|
| | | mylog.error(msg)
|
| | |
|
| | |
|
| | |
|
| | | def OnGeneralDBOper(self, db, pack):
|
| | | buf = pack.getBuffer()
|
| | |
| | | mylog.error(msg)
|
| | | return False
|
| | | return True
|
| | | def OnGMToolCmdUserDBRequest(self,db, pack):
|
| | | # try:
|
| | | # ProjSpecialProcess.OnGMToolCmdUserDBRequest(db,pack)
|
| | | # except:
|
| | | # msg = error.formatMsg('error', error.ERROR_NO_172, "OnGMToolCmdUserDBRequest Catch a unexpetcted exception, error = %s"%traceback.format_exc())
|
| | | # mylog.error(msg)
|
| | | # return False
|
| | | return True
|
| | |
|
| | |
|
| | | def OnMergerChildToCenter(self,db, pack):
|
| | | mylog.debug('OnMergerChildToCenter in')
|
| | | # #伪装来源,便于回包
|
| | |
| | |
|
| | | class tagGMCommand(Structure):
|
| | | Type = 0 #(BYTE Type)
|
| | | ServerID = 0 #(DWORD ServerID)
|
| | | OrderLen = 0 #(BYTE OrderLen)
|
| | | OrderId = "" #(String OrderId)
|
| | | CmdLen = 0 #(DWORD CmdLen)
|
| | |
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.Type,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.OrderLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.OrderId,_pos = CommFunc.ReadString(_lpData, _pos,self.OrderLen)
|
| | | self.CmdLen,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | |
| | |
|
| | | def Clear(self):
|
| | | self.Type = 0
|
| | | self.ServerID = 0
|
| | | self.OrderLen = 0
|
| | | self.OrderId = ""
|
| | | self.CmdLen = 0
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | length += len(self.OrderId)
|
| | | length += 4
|
| | |
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.Type)
|
| | | data = CommFunc.WriteDWORD(data, self.ServerID)
|
| | | data = CommFunc.WriteBYTE(data, self.OrderLen)
|
| | | data = CommFunc.WriteString(data, self.OrderLen, self.OrderId)
|
| | | data = CommFunc.WriteDWORD(data, self.CmdLen)
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Type:%d,
|
| | | ServerID:%d,
|
| | | OrderLen:%d,
|
| | | OrderId:%s,
|
| | | CmdLen:%d,
|
| | |
| | | '''\
|
| | | %(
|
| | | self.Type,
|
| | | self.ServerID,
|
| | | self.OrderLen,
|
| | | self.OrderId,
|
| | | self.CmdLen,
|
| | |
| | | return DumpString
|
| | |
|
| | |
|
| | | |
| | | #GM命令数据库请求#tagGMCommandDBRequest
|
| | | class tagGMCommandDBRequest(Structure):
|
| | | Type = 0 #(BYTE Type)
|