ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -19,22 +19,35 @@
import ShareDefine
import PlayerAssist
import PlayerControl
import PlayerPackData
import PlayerFuncTeam
import CrossLuckyCloudBuy
import IPY_GameServer
import PlayerViewCache
import CrossRealmPlayer
import PlayerCompensation
import PlayerActBossTrial
import PlayerActXianXiaMJ
import PlayerActGubao
import PlayerActHorsePetTrain
import PlayerActLianqi
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
@@ -42,20 +55,37 @@
import cPickle
import time
# 仅输出简短日志的信息类型
ClientServerMsg_ShortLogTypeList = [ShareDefine.ClientServerMsg_PushPlayerCache, ShareDefine.ClientServerMsg_PlayerPackData]
CrossServerMsg_ShortLogTypeList = [ShareDefine.CrossServerMsg_PushPlayerPackData, ShareDefine.CrossServerMsg_ViewPlayerCacheRet]
def SendMsgToCrossServer(msgType, dataMsg):
    ## 发送信息到跨服服务器上
    if GameWorld.IsCrossServer():
        return
    if not dataMsg:
        return
    if msgType not in [ShareDefine.ClientServerMsg_ServerInitOK]:
        isOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
        if not isOpen:
            GameWorld.Log("跨服服务器未开启或维护中不发送消息! SendMsgToCrossServer => %s" % msgType)
            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))
    if msgType in ClientServerMsg_ShortLogTypeList:
        playerID = 0
        if isinstance(dataMsg, dict):
            playerID = dataMsg.get("playerID", 0)
            if not playerID:
                playerID = dataMsg.get("PlayerID", 0)
        msgLen = len(str(srcMsg))
        GameWorld.Log("SendMsgToCrossServer => %s, playerID=%s,msgLen=%s" % (msgType, playerID, msgLen))
    else:
        GameWorld.Log("SendMsgToCrossServer => %s, %s" % (msgType, srcMsg))
    GameWorld.GetGameWorld().SendMergerChildToCenterStringData(sendMsg, len(sendMsg))
    return
@@ -67,23 +97,26 @@
            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 in ClientServerMsg_ShortLogTypeList:
            playerID = 0
            if isinstance(msgData, dict):
                playerID = msgData.get("playerID", 0)
                if not playerID:
                    playerID = msgData.get("PlayerID", 0)
            msgLen = len(str(msgDict))
            GameWorld.Log("OnCrossServerReceiveMsg: %s, serverGroupID=%s,playerID=%s,msgLen=%s" % (msgType, serverGroupID, playerID, msgLen))
        else:
            GameWorld.Log("OnCrossServerReceiveMsg: %s, serverGroupID=%s, %s" % (msgType, serverGroupID, msgDict))
        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_PKOver:
            CrossRealmPK.ClientServerMsg_PKOver(serverGroupID, msgData, tick)
            
        elif msgType == ShareDefine.ClientServerMsg_PKBillboard:
            CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)
@@ -102,7 +135,10 @@
            
        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)
            
@@ -110,7 +146,16 @@
            ClientServerMsg_ServerInitOK(serverGroupID, tick)
            
        elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache:
            CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData)
            PlayerViewCache.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_PushPlayerCache:
            PlayerViewCache.ClientServerMsg_PushPlayerCache(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)
@@ -139,6 +184,9 @@
        elif msgType == ShareDefine.ClientServerMsg_BattlefieldCallChange:
            CrossBattlefield.ClientServerMsg_BattlefieldCallChange(serverGroupID, msgData)
            
        elif msgType == ShareDefine.ClientServerMsg_ChampionshipPKOver:
            CrossChampionship.ClientServerMsg_ChampionshipPKOver(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_ChampionshipOfficialApply:
            CrossChampionship.ClientServerMsg_ChampionshipOfficialApply(serverGroupID, msgData)
            
@@ -163,6 +211,39 @@
        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_LianqiScore:
            PlayerActLianqi.ClientServerMsg_LianqiScore(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)
@@ -179,6 +260,10 @@
         当子服启动成功后,可同步一次跨服服务器活动状态及活动数据给子服
    '''
    GameWorld.Log("收到跨服子服连接成功通知! serverGroupID=%s" % serverGroupID)
    isOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
    if not isOpen:
        GameWorld.Log("跨服服务器维护中不处理! serverGroupID=%s" % serverGroupID)
        return
    Sync_CrossServerInitDataToClientServer(tick, serverGroupID)
    return
@@ -198,7 +283,9 @@
    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):
@@ -258,7 +345,16 @@
    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 msgType in CrossServerMsg_ShortLogTypeList:
        playerID = 0
        if isinstance(dataMsg, dict):
            playerID = dataMsg.get("playerID", 0)
            if not playerID:
                playerID = dataMsg.get("PlayerID", 0)
        msgLen = len(str(srcMsg))
        GameWorld.Log("SendMsgToClientServer => %s, %s, playerID=%s,msgLen=%s" % (msgType, serverGroupIDList, playerID, msgLen))
    else:
        GameWorld.Log("SendMsgToClientServer => %s, %s, %s" % (msgType, serverGroupIDList, srcMsg))
    if not serverGroupIDList:
        GameWorld.GetGameWorld().SendBroadcastMergeClient(sendMsg, len(sendMsg))
    else:
@@ -283,7 +379,18 @@
        msgType = msgDict.get("MsgType", -1)    
        msgData = msgDict.get("Data", "")
        crossServerTimeStr = msgDict.get("CrossServerTime", "")
        GameWorld.Log("OnClientServerReceiveMsg: %s" % msgDict)
        if msgType in CrossServerMsg_ShortLogTypeList:
            playerID = 0
            if isinstance(msgData, dict):
                playerID = msgData.get("playerID", 0)
                if not playerID:
                    playerID = msgData.get("PlayerID", 0)
            msgLen = len(str(msgDict))
            GameWorld.Log("OnClientServerReceiveMsg: %s, playerID=%s,msgLen=%s" % (msgType, playerID, msgLen))
        else:
            GameWorld.Log("OnClientServerReceiveMsg: %s, %s" % (msgType, msgDict))
        if crossServerTimeStr:
            curServerTime = int(time.time())
            crossServerTime = GameWorld.ChangeTimeStrToNum(crossServerTimeStr)
@@ -304,32 +411,35 @@
        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)
            PlayerViewCache.CrossServerMsg_ViewPlayerCacheRet(msgData, tick)
        elif msgType == ShareDefine.CrossServerMsg_PullPlayerViewCache:
            PlayerViewCache.CrossServerMsg_PullPlayerViewCache(msgData)
        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)
@@ -345,6 +455,27 @@
            
        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)
@@ -367,6 +498,12 @@
        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)