| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package CrossRealmMsg  | 
| #  | 
| # @todo:¿ç·þÐÅÏ¢¹ÜÀí  | 
| # @author hxp  | 
| # @date 2018-12-21  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¿ç·þÐÅÏ¢¹ÜÀí  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2018-12-21 18:00"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import ShareDefine  | 
| import PlayerAssist  | 
| import PlayerControl  | 
| import PlayerPackData  | 
| import PlayerFuncTeam  | 
| import CrossLuckyCloudBuy  | 
| import IPY_GameServer  | 
| import CrossRealmPlayer  | 
| import PlayerCompensation  | 
| import PlayerActBossTrial  | 
| import PlayerActXianXiaMJ  | 
| import PlayerActGubao  | 
| import PlayerActHorsePetTrain  | 
| import CrossActionControl  | 
| import CrossActAllRecharge  | 
| import CrossFamilyFlagwar  | 
| import CrossChampionship  | 
| import CrossBattlefield  | 
| import CrossBillboard  | 
| import CrossYaomoBoss  | 
| import GameWorldBoss  | 
| import CrossRealmPK  | 
| import GameXiangong  | 
| import GameWorship  | 
| import PlayerQuery  | 
| import PlayerTalk  | 
| import PyGameData  | 
| import CrossBoss  | 
| import ChConfig  | 
| import ChPlayer  | 
| import PlayerFB  | 
| import GMShell  | 
|   | 
| import traceback  | 
| import cPickle  | 
| import time  | 
|   | 
| def SendMsgToCrossServer(msgType, dataMsg):  | 
|     ## ·¢ËÍÐÅÏ¢µ½¿ç·þ·þÎñÆ÷ÉÏ  | 
|     if GameWorld.IsCrossServer():  | 
|         return  | 
|     if not dataMsg:  | 
|         return  | 
|       | 
|     # ÐÒéÒªÓÃ×î¸ß¼¶2£¬¿É¼õÉÙ³¤¶È  | 
|     srcMsg = {"MsgType":msgType, "Data":dataMsg, "ServerGroupID":GameWorld.GetServerGroupID()}  | 
|     sendMsg = cPickle.dumps(srcMsg, 2)  | 
|     if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):  | 
|         GameWorld.ErrLog("·þÎñÆ÷δÆô¶¯ºÃ,²»ÔÊÐíÏò¿ç·þ·þÎñÆ÷·¢ËÍÊý¾Ý! %s" % (srcMsg))  | 
|         return  | 
|     GameWorld.Log("SendMsgToCrossServer => %s" % (srcMsg))     | 
|     GameWorld.GetGameWorld().SendMergerChildToCenterStringData(sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| def OnCrossServerReceiveMsg(recvMsg, tick):  | 
|     ## ¿ç·þ·þÎñÆ÷ÊÕµ½ÐÅÏ¢´¦Àí  | 
|     try:  | 
|         if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):  | 
|             GameWorld.Log("·þÎñÆ÷δÆô¶¯ºÃ£¬²»´¦Àí×Ó·þÐÅÏ¢!")  | 
|             return  | 
|         msgDict = cPickle.loads(recvMsg)  | 
|           | 
|         GameWorld.Log("OnCrossServerReceiveMsg: %s" % msgDict)  | 
|           | 
|         msgType = msgDict.get("MsgType", -1)      | 
|         msgData = msgDict.get("Data", "")  | 
|         serverGroupID = msgDict.get("ServerGroupID", 0)  | 
|           | 
|         if msgType == ShareDefine.ClientServerMsg_PKMatch:  | 
|             CrossRealmPK.ClientServerMsg_PKMatch(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PKRobotOver:  | 
|             CrossRealmPK.ClientServerMsg_PKRobotOver(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PKCancel:  | 
|             CrossRealmPK.ClientServerMsg_PKCancel(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PKPrepareOK:  | 
|             CrossRealmPK.ClientServerMsg_PKPrepareOK(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PKBillboard:  | 
|             CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_LuckyCloudBuy:  | 
|             CrossLuckyCloudBuy.ClientServerMsg_LuckyCloudBuy(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_QueryBillboard:  | 
|             CrossBillboard.ClientServerMsg_QueryBillboard(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_UpdateBillboard:  | 
|             CrossBillboard.ClientServerMsg_UpdateBillboard(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_MailContent:  | 
|             PlayerCompensation.ClientServerMsg_MailContent(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChatCrossWorld:  | 
|             PlayerTalk.ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PlayerLoginout:  | 
|             ChPlayer.ClientServerMsg_PlayerLoginout(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_GMCMD:  | 
|             GMShell.ClientServerMsg_GMCMD(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ServerInitOK:  | 
|             ClientServerMsg_ServerInitOK(serverGroupID, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache:  | 
|             CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PullOtherPlayerPackData:  | 
|             PlayerPackData.ClientServerMsg_PullOtherPlayerPackData(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_PlayerPackData:  | 
|             PlayerPackData.ClientServerMsg_PlayerPackData(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_QueryNPCInfo:  | 
|             PlayerQuery.ClientServerMsg_QueryNPCInfo(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_EnterFB:  | 
|             PlayerFB.ClientServerMsg_EnterFB(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_SetPlayerAttrValue:  | 
|             MapServer_CrossSetPlayerAttrValue(msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_AddBuff:  | 
|             MapServer_CrossAddBuff(msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_CrossAssist:  | 
|             PlayerAssist.ClientServerMsg_CrossAssist(serverGroupID, msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_BattlefieldBuyOpen:  | 
|             CrossBattlefield.ClientServerMsg_BattlefieldBuyOpen(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_BattlefieldCallJoin:  | 
|             CrossBattlefield.ClientServerMsg_BattlefieldCallJoin(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_BattlefieldCallKick:  | 
|             CrossBattlefield.ClientServerMsg_BattlefieldCallKick(serverGroupID, msgData)  | 
|                           | 
|         elif msgType == ShareDefine.ClientServerMsg_BattlefieldCallChange:  | 
|             CrossBattlefield.ClientServerMsg_BattlefieldCallChange(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialApply:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipOfficialApply(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialApplyReply:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipOfficialApplyReply(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialKick:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipOfficialKick(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialLeave:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipOfficialLeave(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialChallenge:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipOfficialChallenge(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipGuess:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipGuess(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChampionshipWorship:  | 
|             CrossChampionship.ClientServerMsg_ChampionshipWorship(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ActAllRechargeValue:  | 
|             CrossActAllRecharge.ClientServerMsg_ActAllRechargeValue(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_CrossYaomoBossHurtAward:  | 
|             CrossYaomoBoss.ClientServerMsg_CrossYaomoBossHurtAward(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_BossTrialSubmit:  | 
|             PlayerActBossTrial.ClientServerMsg_BossTrialSubmit(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_XianXiaMJScore:  | 
|             PlayerActXianXiaMJ.ClientServerMsg_XianXiaMJScore(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_GubaoScore:  | 
|             PlayerActGubao.ClientServerMsg_GubaoScore(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_HorsePetTrainScore:  | 
|             PlayerActHorsePetTrain.ClientServerMsg_HorsePetTrainScore(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_CreateFuncTeam:  | 
|             PlayerFuncTeam.ClientServerMsg_CreateFuncTeam(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_ChangeFuncTeam:  | 
|             PlayerFuncTeam.ClientServerMsg_ChangeFuncTeam(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_FuncTeamMemOP:  | 
|             PlayerFuncTeam.ClientServerMsg_FuncTeamMemOP(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_QueryFuncTeam:  | 
|             PlayerFuncTeam.ClientServerMsg_QueryFuncTeam(serverGroupID, msgData)  | 
|               | 
|         elif msgType == ShareDefine.ClientServerMsg_QueryXiangong:  | 
|             GameXiangong.ClientServerMsg_QueryXiangong(serverGroupID, msgData)  | 
|               | 
|         # ÐèÒª·¢Ë͵½µØÍ¼·þÎñÆ÷´¦ÀíµÄ  | 
|         elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]:  | 
|             MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID)  | 
|               | 
|         else:  | 
|             GameWorld.ErrLog("ûÓиÃÐÅÏ¢ÀàÐÍÂß¼´¦Àí£¡")  | 
|               | 
|     except:  | 
|         GameWorld.RaiseException("¿ç·þ·þÎñÆ÷½ÓÊÕÐÅÏ¢´¦Àí±¨´í \r\n%s" % str(traceback.format_exc()))  | 
|     return  | 
|   | 
| def ClientServerMsg_ServerInitOK(serverGroupID, tick):  | 
|     ''' ÊÕµ½×Ó·þÁ¬½Ó³É¹¦Í¨Öª   | 
|          µ±×Ó·þÆô¶¯³É¹¦ºó£¬¿Éͬ²½Ò»´Î¿ç·þ·þÎñÆ÷»î¶¯×´Ì¬¼°»î¶¯Êý¾Ý¸ø×Ó·þ  | 
|     '''  | 
|     GameWorld.Log("ÊÕµ½¿ç·þ×Ó·þÁ¬½Ó³É¹¦Í¨Öª! serverGroupID=%s" % serverGroupID)  | 
|     Sync_CrossServerInitDataToClientServer(tick, serverGroupID)  | 
|     return  | 
|   | 
| def Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0):  | 
|     ''' Í¬²½¿ç·þ¹¦ÄÜÊý¾Ýµ½×Ó·þ·þÎñÆ÷  | 
|         ±¾º¯Êýµ÷ÓÃʱ»ú£º  | 
|         1.¿ç·þ·þÎñÆ÷Æô¶¯³É¹¦£¬Ö÷¶¯¹ã²¥Í¬²½ËùÓÐ×Ó·þ£¬´ËʱÉèÖàserverGroupID Îª 0  | 
|         2.×Ó·þÆô¶¯³É¹¦£¬ÓÉ×Ó·þÖ÷¶¯·¢ÆðÇëÇóͬ²½×îÐÂÊý¾Ý£¬´ËʱÓÐÖ¸¶¨×Ó·þ serverGroupID  | 
|         3.×Ó·þÖØÐÂÁ¬½Ó¿ç·þ·þÎñÆ÷³É¹¦£¬Â߼ͬ2  | 
|         @param serverGroupID: ×Ó·þ·þÎñÆ÷×éID£¬Îª0ʱΪȫ²¿×Ó·þÎñÆ÷×é  | 
|     '''  | 
|     CrossRealmPlayer.Sync_CrossCommInitDataToClientServer(serverGroupID)  | 
|     CrossRealmPK.Sync_CrossPKInitDataToClientServer(tick, serverGroupID)  | 
|     CrossChampionship.Sync_CrossChampionshipDataToClientServer(serverGroupID)  | 
|     CrossBattlefield.Sync_CrossBattlefieldDataToClientServer(serverGroupID)  | 
|     CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID)  | 
|     CrossActionControl.Sync_CrossActInfoToClientServer(serverGroupID)  | 
|     CrossLuckyCloudBuy.Sync_LuckyCloudBuyDataToClientServer(tick, serverGroupID)  | 
|     CrossActAllRecharge.Sync_AllRechargeDataToClientServer(serverGroupID)  | 
|     CrossYaomoBoss.Sync_CrossYaomoBossDataToClientServer(serverGroupID)  | 
|     PlayerCompensation.Sync_CrossMailPlayerIDToClientServer(serverGroupID)  | 
|     GameWorship.Sync_CrossWorshipToClientServer(serverGroupID)  | 
|     return  | 
|   | 
| def MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID):  | 
|     ## ÊÕµ½×Ó·þÐÅÏ¢£¬ÐèÒª·¢Ë͵½µØÍ¼·þÎñÆ÷´¦Àí  | 
|       | 
|     if not isinstance(msgData, dict):  | 
|         return  | 
|     tagPlayerID = msgData.get("PlayerID")  | 
|     if not tagPlayerID:  | 
|         return  | 
|     tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|     if not tagPlayer:  | 
|         return  | 
|     msgInfo = str([msgType, msgData, serverGroupID])  | 
|     tagPlayer.MapServer_QueryPlayerResult(0, 0, "CrossServerReceiveMsg", msgInfo, len(msgInfo))  | 
|     return  | 
|   | 
| def MapServer_CrossSetPlayerAttrValue(msgData):  | 
|     for playerID, setAttrInfoList in msgData.items():  | 
|         player = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  | 
|         if not player:  | 
|             return  | 
|         msgInfo = str(setAttrInfoList)  | 
|         player.MapServer_QueryPlayerResult(0, 0, "CrossSetPlayerAttrValue", msgInfo, len(msgInfo))  | 
|     return  | 
|   | 
| def MapServer_CrossAddBuff(msgData):  | 
|     ## ÊÕµ½×Ó·þÐÅÏ¢£¬Ìí¼Óbuff  | 
|     tagPlayerID = msgData.get("PlayerID")  | 
|     if not tagPlayerID:  | 
|         return  | 
|     tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|     if not tagPlayer:  | 
|         return  | 
|     buffID = msgData.get("buffID")  | 
|     if not buffID:  | 
|         return  | 
|     sendMsg = str(buffID)  | 
|     tagPlayer.MapServer_QueryPlayerResult(0, 0, 'AddBuff', sendMsg, len(sendMsg))  | 
|     return  | 
| ## ================================================================================================  | 
|   | 
| def SendMsgToClientServer(msgType, dataMsg, serverGroupIDList=None):  | 
|     ''' ¹ã²¥ÐÅÏ¢µ½×Ó·þÎñÆ÷ÉÏ  | 
|         @param serverGroupIDList: ·¢ËÍÖ¸¶¨µÄ·þÎñÆ÷×éIDÁÐ±í£¬ÄÚ²¿ÒѾÕë¶ÔÁбíÖÐ×éIDÈ¥ÖØ£¬  | 
|         ËùÒÔÍⲿÂß¼¿ÉÖ±½ÓÌí¼Ó£¬²»Óÿ¼ÂÇ×éIDÖØ¸´ÎÊÌ⣬ûÓÐÖ¸¶¨·þÎñÆ÷×éIDʱ£¬Ä¬ÈϹ㲥ËùÓÐ×Ó·þ  | 
|     '''  | 
|     if not GameWorld.IsCrossServer():  | 
|         return  | 
|     #if not dataMsg:  | 
|     #    return  | 
|     if serverGroupIDList == None:  | 
|         serverGroupIDList = []  | 
|           | 
|     srcMsg = {"MsgType":msgType, "Data":dataMsg, "CrossServerTime":GameWorld.GetCurrentDataTimeStr()}  | 
|     sendMsg = cPickle.dumps(srcMsg, 2)  | 
|     if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):  | 
|         GameWorld.ErrLog("¿ç·þ·þÎñÆ÷δÆô¶¯ºÃ,²»ÔÊÐíÏò×Ó·þ·¢ËÍÊý¾Ý! serverGroupIDList=%s, srcMsg=%s" % (serverGroupIDList, srcMsg))  | 
|         return  | 
|     GameWorld.Log("SendMsgToClientServer => serverGroupIDList=%s, srcMsg=%s" % (serverGroupIDList, srcMsg))  | 
|     if not serverGroupIDList:  | 
|         GameWorld.GetGameWorld().SendBroadcastMergeClient(sendMsg, len(sendMsg))  | 
|     else:  | 
|         serverGroupIDList = list(set(serverGroupIDList)) # È¥ÖØ  | 
|         #for serverGroupID in serverGroupIDList:  | 
|         #    GameWorld.GetGameWorld().SendMergeMsgToClientByGroupID(serverGroupID, sendMsg, len(sendMsg))  | 
|         jsonGroupIDInfo = cPickle.dumps(serverGroupIDList, 2)  | 
|         GameWorld.GetGameWorld().SendMergeMsgToClientByGroupList(jsonGroupIDInfo, len(jsonGroupIDInfo), sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| def OnClientServerReceiveMsg(index, tick):  | 
|     ## ×Ó·þÊÕµ½¿ç·þ·þÎñÆ÷ÐÅÏ¢  | 
|     dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient()  | 
|     dataMsg = dataPack.GetData()  | 
|       | 
|     try:  | 
|         if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):  | 
|             GameWorld.Log("·þÎñÆ÷δÆô¶¯ºÃ£¬²»´¦Àí¿ç·þÐÅÏ¢!")  | 
|             return  | 
|           | 
|         msgDict = cPickle.loads(dataMsg)  | 
|         msgType = msgDict.get("MsgType", -1)      | 
|         msgData = msgDict.get("Data", "")  | 
|         crossServerTimeStr = msgDict.get("CrossServerTime", "")  | 
|         GameWorld.Log("OnClientServerReceiveMsg: %s" % msgDict)  | 
|         if crossServerTimeStr:  | 
|             curServerTime = int(time.time())  | 
|             crossServerTime = GameWorld.ChangeTimeStrToNum(crossServerTimeStr)  | 
|             curServerCrossServerTime = GameWorld.ChangeTimeStrToNum(GameWorld.GetCrossServerTimeStr())  | 
|             diffSeconds = curServerCrossServerTime - crossServerTime# ±¾·þ¼ÆËãÎó²î  | 
|               | 
|             _, _, syncMapTime = PyGameData.g_crossServerTimeInfo  | 
|             PyGameData.g_crossServerTimeInfo = [crossServerTime, curServerTime, syncMapTime]  | 
|             if curServerTime - syncMapTime >= 600 or abs(diffSeconds) >= 30 or msgType == ShareDefine.CrossServerMsg_CrossServerTime: # Ò»¶¨Ê±¼äͬ²½µØÍ¼Ò»´Î »ò¼ÆËã Îó²î³¬¹ý30Ãë »òÇ¿ÖÆÍ¬²½Ê±¼äµÄ  | 
|                 GameWorld.DebugLog("ͬ²½µØÍ¼¿ç·þ·þÎñÆ÷ʱ¼äʱ£¬±¾·þÓë¿ç·þ·þÎñÆ÷ʱ¼ä¼ÆËãÎó²î£¡ diffSeconds=%s" % (diffSeconds))  | 
|                 syncMapTime = curServerTime  | 
|                 PyGameData.g_crossServerTimeInfo = [crossServerTime, curServerTime, syncMapTime]  | 
|                 GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerTime, PyGameData.g_crossServerTimeInfo)  | 
|                   | 
|         if msgType == ShareDefine.CrossServerMsg_ExitCrossServer:  | 
|             CrossRealmPlayer.CrossServerMsg_ExitCrossServer(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_Notify:  | 
|             PlayerControl.CrossServerMsg_Notify(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PlayerLoginout:  | 
|             ChPlayer.CrossServerMsg_PlayerLoginout(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChatCrossWorld:  | 
|             PlayerTalk.CrossServerMsg_ChatCrossWorld(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet:  | 
|             CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PlayerPackDataState:  | 
|             PlayerPackData.CrossServerMsg_PlayerPackDataState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PullPlayerPackData:  | 
|             PlayerPackData.CrossServerMsg_PullPlayerPackData(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PushPlayerPackData:  | 
|             PlayerPackData.CrossServerMsg_PushPlayerPackData(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKMatchReqRet:  | 
|             CrossRealmPK.CrossServerMsg_PKMatchReqRet(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKMatchResult:  | 
|             CrossRealmPK.CrossServerMsg_PKMatchResult(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKReadyOKRoomList:  | 
|             CrossRealmPK.CrossServerMsg_PKReadyOKRoomList(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKTimeoutRoomList:  | 
|             CrossRealmPK.CrossServerMsg_PKTimeoutRoomList(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKOverInfo:  | 
|             CrossRealmPK.CrossServerMsg_PKOverInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKSeasonInfo:  | 
|             CrossRealmPK.CrossServerMsg_PKSeasonInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PKSyncBillboard:  | 
|             CrossRealmPK.CrossServerMsg_PKSyncBillboard(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_LuckyCloudBuyLottery:  | 
|             CrossLuckyCloudBuy.CrossServerMsg_LuckyCloudBuyLottery(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_LuckyCloudBuyNum:  | 
|             CrossLuckyCloudBuy.CrossServerMsg_LuckyCloudBuyNum(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_BattlefieldState:  | 
|             CrossBattlefield.CrossServerMsg_BattlefieldState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_BattlefieldBuy:  | 
|             CrossBattlefield.CrossServerMsg_BattlefieldBuy(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_BattlefieldOver:  | 
|             CrossBattlefield.CrossServerMsg_BattlefieldOver(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_FamilyFlagwarOver:  | 
|             CrossFamilyFlagwar.CrossServerMsg_FamilyFlagwarOver(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossBossTrialFamilyAward:  | 
|             PlayerActBossTrial.CrossServerMsg_CrossBossTrialFamilyAward(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_FuncTeamInfo:  | 
|             PlayerFuncTeam.CrossServerMsg_FuncTeamInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_FuncTeamDel:  | 
|             PlayerFuncTeam.CrossServerMsg_FuncTeamDel(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_FuncTeamList:  | 
|             PlayerFuncTeam.CrossServerMsg_FuncTeamList(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_Worship:  | 
|             GameWorship.CrossServerMsg_Worship(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_Xiangong:  | 
|             GameXiangong.CrossServerMsg_Xiangong(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipState:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipPlayer:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipPlayer(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipGroup:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipGroup(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipGuess:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipGuess(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipOfficial:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipOfficial(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ChampionshipDailyOfficial:  | 
|             CrossChampionship.CrossServerMsg_ChampionshipDailyOfficial(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_ActAllRechargeInfo:  | 
|             CrossActAllRecharge.CrossServerMsg_ActAllRechargeInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossDailyActionState:  | 
|             CrossActionControl.CrossServerMsg_CrossDailyActionState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossYaomoBossHurtInfo:  | 
|             CrossYaomoBoss.CrossServerMsg_CrossYaomoBossHurtInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_SyncBillboard:  | 
|             CrossBillboard.CrossServerMsg_SyncBillboard(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossBossInfo:  | 
|             CrossBoss.CrossServerMsg_CrossBossInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossBossState:  | 
|             CrossBoss.CrossServerMsg_CrossBossState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossAssist:  | 
|             PlayerAssist.CrossServerMsg_CrossAssist(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossActInfo:  | 
|             CrossActionControl.CrossServerMsg_CrossActInfo(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_PutInItem:  | 
|             CrossRealmPlayer.CrossServerMsg_PutInItem(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_GiveMoney:  | 
|             CrossRealmPlayer.CrossServerMsg_GiveMoney(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_DropGoodItem:  | 
|             GameWorldBoss.CrossServerMsg_DropGoodItem(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_NPCInfoRet:  | 
|             PlayerQuery.CrossServerMsg_NPCInfoRet(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_EnterFBRet:  | 
|             PlayerFB.CrossServerMsg_EnterFBRet(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_EnterVSRoomRet:  | 
|             PlayerFB.CrossServerMsg_EnterVSRoomRet(msgData, tick)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_SendMail:  | 
|             PlayerCompensation.CrossServerMsg_SendMail(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_MailPlayerIDList:  | 
|             PlayerCompensation.CrossServerMsg_MailPlayerIDList(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_MailContent:  | 
|             PlayerCompensation.CrossServerMsg_MailContent(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_FBPlayerCount:  | 
|             PlayerFB.CrossServerMsg_FBPlayerCount(msgData)  | 
|               | 
|         # ÐèÒª·¢Ë͵½µØÍ¼·þÎñÆ÷´¦ÀíµÄ  | 
|         elif msgType in [ShareDefine.CrossServerMsg_RebornRet, ShareDefine.CrossServerMsg_CollectNPCOK, ShareDefine.CrossServerMsg_FBEnd,  | 
|                          ShareDefine.CrossServerMsg_NPCAttackCount]:  | 
|             MapServer_ClientServerReceiveMsg(msgType, msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossServerState:  | 
|             CrossRealmPlayer.CrossServerMsg_CrossServerState(msgData)  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_CrossServerTime:  | 
|             playerID = msgData.get("PlayerID")  | 
|             if playerID:  | 
|                 tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  | 
|                 if tagPlayer:  | 
|                     GameWorld.DebugAnswer(tagPlayer, "¿ç·þ·þÎñÆ÷ʱ¼ä: %s" % GameWorld.GetCrossServerTimeStr())  | 
|               | 
|         elif msgType == ShareDefine.CrossServerMsg_DebugAnswer:  | 
|             GameWorld.CrossServerMsg_DebugAnswer(msgData)  | 
|               | 
|         else:  | 
|             GameWorld.ErrLog("ûÓиÃÐÅÏ¢ÀàÐÍÂß¼´¦Àí£¡")  | 
|               | 
|     except:  | 
|         GameWorld.RaiseException("×Ó·þ·þÎñÆ÷½ÓÊÕÐÅÏ¢´¦Àí±¨´í\r\n%s" % str(traceback.format_exc()))  | 
|     return  | 
|   | 
| def MapServer_ClientServerReceiveMsg(msgType, msgData):  | 
|     ## ÊÕµ½¿ç·þ·þÎñÆ÷ÐÅÏ¢£¬ÐèÒª·¢Ë͵½µØÍ¼·þÎñÆ÷´¦Àí  | 
|       | 
|     if msgType in [ShareDefine.CrossServerMsg_FBEnd]:  | 
|         curServerGroupID = GameWorld.GetServerGroupID()  | 
|         for tagPlayerID, msgInfo in msgData.items():  | 
|             if not msgInfo:  | 
|                 continue  | 
|             serverGroupID = msgInfo[0]  | 
|             if curServerGroupID != serverGroupID:  | 
|                 continue  | 
|             tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|             if not tagPlayer:  | 
|                 continue  | 
|             msgInfo = str([msgType, msgInfo[1:]])  | 
|             tagPlayer.MapServer_QueryPlayerResult(0, 0, "ClientServerReceiveMsg", msgInfo, len(msgInfo))  | 
|               | 
|         return  | 
|       | 
|     if not isinstance(msgData, dict):  | 
|         return  | 
|     tagPlayerID = msgData.get("PlayerID")  | 
|     if not tagPlayerID:  | 
|         return  | 
|     tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)  | 
|     if not tagPlayer:  | 
|         return  | 
|     msgInfo = str([msgType, msgData])  | 
|     tagPlayer.MapServer_QueryPlayerResult(0, 0, "ClientServerReceiveMsg", msgInfo, len(msgInfo))  | 
|     return  | 
|   | 
| # Á¬½Ó¿ç·þ·þÎñÆ÷״̬  | 
| # 1 ÎªÁ¬½Ó³É¹¦; ÆäËûΪʧ°Ü£¬Ê§°Ü»áÑÓ³Ù֪ͨ  | 
| def OnConnCorossServer(index, tick):  | 
|     ## ×Ó·þÊÕµ½¿ç·þ·þÎñÆ÷ÐÅÏ¢  | 
|     dataPack = IPY_GameServer.IPY_LGCrossLoginResult()  | 
|     result = dataPack.GetResult()  | 
|     connState = 1 if result == 1 else 0  | 
|     GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerConnState, connState)  | 
|       | 
|     if result != 1:  | 
|         GameWorld.Log("===Óë¿ç·þ·þÎñÆ÷¶Ï¿ªÁ¬½Ó!")  | 
|         CrossRealmPlayer.CrossServerMsg_CrossServerState({"isOpen":0})  | 
|         return  | 
|       | 
|     GameWorld.Log("===Óë¿ç·þ·þÎñÆ÷Á¬½Ó³É¹¦!")  | 
|     if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):  | 
|         GameWorld.Log("    ·þÎñÆ÷»¹Î´Æô¶¯ºÃ£¬Ôݲ»´¦Àí! µÈ·þÎñÆ÷Æô¶¯ºÃºóÔÙ´¦Àí£¡")  | 
|         return  | 
|       | 
|     serverGroupID = GameWorld.GetServerGroupID()  | 
|     if GameWorld.IsCrossRealmOpen() and not GameWorld.IsCrossServer():  | 
|         GameWorld.Log("֪ͨ¿ç·þÖ÷·þÎñÆ÷Á´½Ó³É¹¦, ¿É½ÓÊÕ×îпç·þ»î¶¯×´Ì¬¼°Êý¾Ý...")  | 
|         dataMsg = {"ServerGroupID":serverGroupID}  | 
|         SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg)  | 
|           | 
|     return  | 
|   | 
| def OnGameServerInitOK():  | 
|     ## ·þÎñÆ÷Æô¶¯³É¹¦  | 
|       | 
|     tick = GameWorld.GetGameWorld().GetTick()  | 
|       | 
|     if GameWorld.IsCrossServer():  | 
|         Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0) # ÕâÀïÉèÖÃΪ0£¬¹ã²¥ËùÓÐ×Ó·þÎñÆ÷×é  | 
|         return  | 
|       | 
|     serverGroupID = GameWorld.GetServerGroupID()  | 
|     if GameWorld.IsCrossRealmOpen() and not GameWorld.IsCrossServer():  | 
|         GameWorld.Log("֪ͨ¿ç·þÖ÷·þÎñÆ÷Æô¶¯³É¹¦, ¿É½ÓÊÕ×îпç·þ»î¶¯×´Ì¬¼°Êý¾Ý...")  | 
|         dataMsg = {"ServerGroupID":serverGroupID}  | 
|         SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg)  | 
|     return  | 
|   | 
|   | 
|      |