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