| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package proiSpecialProcess  | 
| #  | 
| # @todo: gm¹¤¾ßdbÖ´ÐÐÎļþ  | 
| # @author xmnathan  | 
| # @date 2009-06-04 15:30  | 
| # @version 2.0  | 
| #  | 
| # ÏêϸÃèÊö:   | 
| # @change: "2012-06-14 18:00" wdb gm¹¤¾ßµ÷Õû  | 
| # @change: "2012-06-19 15:00" wdb ³õʼ»¯funcName  | 
| # @change: "2012-07-12 18:00" wdb Ôö¼Ó±àÂëÊôÐÔ  | 
| # @change: "2012-07-30 11:30" wdb GM»Ø¸´Ï¸»¯£¬´úÂëÓÅ»¯  | 
| # @change: "2014-09-23 12:00" hxp ¸öÈ˲¹³¥ÃüÁîÐÅÏ¢Ôö¼Ó²éÑ¯Íæ¼ÒIDÐÅÏ¢ÍÆ¸øGameServer  | 
| # @change: "2014-09-29 11:00" hxp ÐÞ¸´Ð޸ĸöÈ˲¹³¥ÃüÁî×ÖµäʱÖÐÎıàÂë´íÎóÎÊÌâ  | 
| # @change: "2014-10-11 16:30" hxp »»ÐбàÂë´íÎó´¦Àí  | 
| # @change: "2015-02-10 20:30" xmnathan Ôö¼ÓGameServer»Ø°ü´¦Àíº¯Êý  | 
| # @change: "2015-10-28 14:00" hxp ·µ»Ø¸ñʽʹÓÃjson  | 
| # @change: "2017-04-26 16:30" hxp ×ª»¯±àÂë¸ñʽ´¦Àíµ¥ÒýºÅ  | 
| #------------------------------------------------------------------------------   | 
| #"""Version = 2017-04-26 16:30"""  | 
| #------------------------------------------------------------------------------   | 
|   | 
| from GMToolPyInterface import *  | 
| from DBCommon import GlobalFunctions  | 
| from Commands import GMCommon  | 
| import Commands  | 
| import copy  | 
| import os  | 
| import traceback  | 
| import json  | 
|   | 
| from MangoDBCommon import fix_incomingText  | 
| from Collections import DataServerPlayerData  | 
| from Collections.CollectionDefine import *  | 
| from Common import (CommFuncEx, mylog)  | 
| from Protocol import MMORPGPack  | 
|         | 
| ##################################################################   | 
|                 ####### pythonÂß¼Èë¿Ú #######   | 
|   | 
| ## µ¼ÈëGMÈ«²¿ÃüÁî  | 
| #  @param importDir Â·¾¶Ãû  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ImportCommandAll(importDir):  | 
|     curPath = GlobalFunctions.getAppPath()  | 
|     for root, dirs, files in os.walk("%s\\%s"%(curPath, importDir)):  | 
|         for file in files:  | 
|             fileName = os.path.join(root, file)  | 
|             fileName = fileName.replace(curPath, "")  | 
|             fileName = fileName[1:len(fileName)]  | 
|             if fileName.find("__init__") >= 0:  | 
|                 continue  | 
|               | 
|             curFileList = fileName.split(".")  | 
|             fileName = curFileList[0]  | 
|             ext = curFileList[1]  | 
|             if ext not in ['pyc', 'py']:  | 
|                 continue  | 
|               | 
|             fileName = fileName.replace("\\",".")  | 
|             __import__(fileName)  | 
|   | 
| ImportCommandAll("GMToolLogicProcess\\Commands")  | 
|   | 
| # gmÃüÁî¹ÜÀí  | 
| _GMCmdOrderMgr = None  | 
| #################  | 
| #GMÃüÁî·Ö·¢´¦ÀíÈë¿Ú#  | 
| #################  | 
| ## GMÃüÁî·Ö·¢´¦ÀíÈë¿Ú  | 
| #  @param None   | 
| #  @return None  | 
| def OnGMToolCommand(pack):  | 
|     mylog.info('ProjSpecialProcess OnGMToolCommand IN')  | 
|     #GM¹¤¾ß½Ó¿ÚÃüÁî  | 
|     #¶ÁÈ¡·â°üÊý¾Ý  | 
|     recvPack = RecvPackProtocol.tagGMCommand()  | 
|     recvPack.ReadData(pack.getBuffer())  | 
|       | 
|     orderLen = recvPack.OrderLen  | 
|     orderId = recvPack.OrderId  | 
|     cmdLen = recvPack.CmdLen  | 
|     cmd = recvPack.Cmd  | 
|     uerDataLen = recvPack.UserDataLen  | 
|     userData = recvPack.UserData  | 
|     #-----------------------  | 
|     #ÏîÄ¿×é¸ù¾ÝÃüÁîÀàÐͽøÐд¦Àí  | 
|     #-----------------------  | 
|     mylog.info('GM Tool Cmd->%s,orderId->%s'%(cmd, orderId))  | 
|     funcName = ''  | 
|     try:  | 
|         # »ñµÃgmÃüÁîÐÅÏ¢  | 
|         gmCmdDict = eval(cmd)            | 
|         funcName = gmCmdDict.get(GMCommon.Def_GMKey_Type, '')    | 
|   | 
|         if funcName == None:                          | 
|             GMCommandResult(orderId, gmCmdDict, GMCommon.Def_GMCmdNone)  | 
|             return  | 
|           | 
|         # ×ª»»±àÂë¸ñʽ  | 
|         cmdDict = ChangeEncodIng(gmCmdDict)   | 
|         if cmdDict == {}:  | 
|             GMCommandResult(orderId, gmCmdDict, GMCommon.Def_EncodeFail)  | 
|             return  | 
|           | 
|         gmCmdManger = GMCmdManger()  | 
|         gmCmdManger.gmCmdDict = cmdDict  | 
|         gmCmdManger.funcName = funcName  | 
|         gmCmdManger.orderId = orderId  | 
|         gmCmdManger.userData = userData  | 
|         gmCmdManger.pack = copy.deepcopy(pack)  | 
|         gmCmdManger.gmCmdDictUnEncode = gmCmdDict  | 
|           | 
|         # ÃüÁî¼ÓÈë¹ÜÀíÆ÷  | 
|         GetGMOrderMgr().AddCmd(orderId, gmCmdManger)  | 
|         # Ö´ÐÐÃüÁî  | 
|         gmCmdManger.GMToolCommand()  | 
|           | 
|     except BaseException:  | 
|         mylog.info('GM cmd error - > %s'%(traceback.format_exc()))  | 
|         # É¾³ý¸ÄgmÃüÁî  | 
|         GetGMOrderMgr().PopCmd(orderId)  | 
|         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')  | 
|     return  | 
|   | 
| def OnGMToolCommandResult(pack):  | 
|     #GM¹¤¾ß½Ó¿ÚÃüÁî  | 
|     #¶ÁÈ¡·â°üÊý¾Ý  | 
|     sendpack = SendPackProtocol.tagGMCommandResult()  | 
|     sendpack.ReadData(pack.GetBuffer())  | 
|       | 
|       | 
|       | 
|     #·µ»ØÐ޸ĺóµÄ°ü  | 
|     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´¦Àí¶à¸öÍæ¼Ò²¹³¥Í¬Ò»ÎïÆ·Ê±Ö»ÊÕÒ»´ÎÃüÁî°ü´¦Àí£¨Ö»²åÈëÒ»ÌõÎïÆ·Êý¾Ý£©  | 
|     # ¹Ê´Ë´¦ÏȲé³ö¶à¸öÍæ¼ÒÕ˺Å/êdzƶÔÓ¦µÄ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  | 
|   | 
| ##################################################################   | 
|   | 
|   | 
| ## gmÃüÁîÖ´ÐÐ  | 
| #  | 
| # gmÃüÁîÖ´ÐÐ  | 
| class GMCmdManger:  | 
|       | 
|     ## ³õʼ»¯  | 
|     #  @param self  | 
|     #  @return ·µ»ØÖµ  | 
|     def __init__(self):  | 
|         self.Clear()  | 
|         return  | 
|       | 
|       | 
|     ## ³õʼ»¯  | 
|     #  @param self  | 
|     #  @return ·µ»ØÖµ  | 
|     def Clear(self):  | 
|         self.gmCmdDict = {}  | 
|         self.funcName = ''  | 
|         self.orderId = 0  | 
|         self.userData = None  | 
|         self.pack = None  | 
|         self.gmCmdDictUnEncode = {} # Î´×ªÂëµÄcmd£¬¸Ä°üʱºòÓà  | 
|         return  | 
|       | 
|     ## ÊÕµ½ÃüÁ¿ªÊ¼Ö´ÐÐ  | 
|     #  @param self  | 
|     #  @return None  | 
|     def GMToolCommand(self):  | 
|         callFunc = GetExecFunc(Commands, "%s.%s"%(self.funcName, "OnExec"))  | 
|           | 
|         execType = GMCommon.Def_SendToGameServer  | 
|         execInfo = ''  | 
|         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ÃüÁî¹ÜÀí  | 
| #  | 
| # gmÃüÁî¹ÜÀí   | 
| class GMCmdOrderMgr:  | 
|   | 
|     ## ³õʼ  | 
|     #  @param self  | 
|     #  @return None  | 
|     def __init__(self):  | 
|         self.__CmdOrderdict={} #key:OrderID,Value:GMCmdManger  | 
|         return  | 
|       | 
|     ## Ìí¼Ó  | 
|     #  @param self  | 
|     #  @param orderId:gm±êʶ  | 
|     #  @param cmdManger:Ìí¼ÓµÄgmÃüÁî  | 
|     #  @return None  | 
|     def AddCmd(self, orderId, cmdManger):  | 
|         if orderId in self.__CmdOrderdict.keys():  | 
|             mylog.warning("orderId = %s already exists,New cmd = %d"%(orderId, cmdManger.funcName))  | 
|             return False  | 
|           | 
|         self.__CmdOrderdict[orderId] = cmdManger  | 
|         return True  | 
|   | 
|   | 
|     ##ɾ³ý  | 
|     #  @param self  | 
|     #  @param orderId:gm±êʶ  | 
|     #  @return None  | 
|     def PopCmd(self, orderId):  | 
|         return self.__CmdOrderdict.pop(orderId, None)  | 
|       | 
|     ##²éÕÒ  | 
|     #  @param self  | 
|     #  @param orderId:gm±êʶ  | 
|     #  @return None  | 
|     def GetCmd(self, orderId):  | 
|         return self.__CmdOrderdict.get(orderId, None)  | 
|   | 
| ## gmÃüÁî¹ÜÀí  | 
| #  @param None   | 
| #  @return ÃüÁî¹ÜÀíÆ÷  | 
| def GetGMOrderMgr():  | 
|     global _GMCmdOrderMgr  | 
|       | 
|     if _GMCmdOrderMgr != None:  | 
|         return _GMCmdOrderMgr  | 
|       | 
|     _GMCmdOrderMgr = GMCmdOrderMgr()  | 
|     return _GMCmdOrderMgr   | 
|       | 
|       | 
| ## º¯Êýµ÷Óà  | 
| #  @param curCallObj ÊµÀý£¨¿ÉÄÜÊÇij¸öÎļþÃû£©   | 
| #  @param callName ÊµÀýµÄij¸öÊôÐÔ  | 
| #  @return ÊôÐÔ  | 
| def ParseNameGetObj(curCallObj, callName):  | 
|     callList = callName.split(".")  | 
|     if len(callList) <= 1:  | 
|         return None  | 
|       | 
|     for curCallName in callList:  | 
|         if hasattr(curCallObj, curCallName) != True:  | 
|             #ÎÞ´ËÊôÐÔ  | 
|             return None  | 
|           | 
|         curCallObj = getattr(curCallObj, curCallName)  | 
|           | 
|     return curCallObj  | 
|   | 
| ## Íⲿµ÷ÓõĻñÈ¡ÊôÐÔ£¬ÇÒÊÇ¿ÉÒÔcallµÄ  | 
| #  @param curCallObj ÊµÀý£¨¿ÉÄÜÊÇij¸öÎļþÃû£©   | 
| #  @param callName ÊµÀýµÄij¸öÊôÐÔ  | 
| #  @return ¿ÉÒÔcallµÄÊôÐÔ  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def GetExecFunc(curCallObj, callName):  | 
|     curCallObj = ParseNameGetObj(curCallObj, callName)  | 
|       | 
|     if curCallObj == None:  | 
|         return None  | 
|           | 
|     if callable(curCallObj) != True:  | 
|         #²»¿Éµ÷Óà  | 
|         return None  | 
|       | 
|     return curCallObj      | 
|       | 
|       | 
| ## »Ø¸´gm  | 
| # @param db: dbGameUserÊý¾Ý  | 
| # @param gmCmdDict: gmÃüÁîÊý¾Ý  | 
| # @param resultType: ½á¹ûÀàÐÍ   | 
| # @param strMsg: ½á¹ûÐÅÏ¢  | 
| # @param useData:   | 
| # @return None   | 
| def GMCommandResult(orderId, gmCmd, resultType, strMsg=None, useData=''):  | 
|     resultDcit = {GMCommon.Def_GMKey_Type:gmCmd,  | 
|                    GMCommon.Def_GMKey_ResultType:resultType,  | 
|                     GMCommon.Def_GMKey_ResultMsg:strMsg}  | 
|       | 
|     resultMsg = json.dumps(resultDcit, ensure_ascii=False)  | 
|       | 
|     mylog.info("gm result:%s"%resultMsg)  | 
|     SendToGMToolCommandResult(len(orderId), orderId, len(resultMsg), resultMsg, len(useData), useData)  | 
|     return  | 
|   | 
|   | 
| ## ×ª»»±àÂë¸ñʽ  | 
| # @param gmCmdDict: gmÃüÁîÊý¾Ý  | 
| # @return None   | 
| def ChangeEncodIng(gmCmdDict):  | 
|     cmdDict = {}  | 
|       | 
|     coding = gmCmdDict.get('coding', '')  | 
|     if coding == '':  | 
|         return cmdDict  | 
|       | 
|     for key, value in gmCmdDict.items():  | 
|           | 
|         if not isinstance(value, str):  | 
|             continue  | 
|           | 
|         # Ôö¼Óu  | 
|         try:  | 
|             value = value.replace("\r\n", "`r")  | 
|             value = value.replace("\'", "\\'")  | 
|             translateStr = eval("u'%s'"%value)  | 
|             translateStr = translateStr.encode(coding)  | 
|         except:  | 
|             mylog.info('translateStr error! srcStr = %s '%repr(value))  | 
|             return cmdDict  | 
|           | 
|         cmdDict[key] = translateStr  | 
|           | 
|     return cmdDict  | 
|        | 
|   |