ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -19,11 +19,18 @@
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
@@ -33,12 +40,14 @@
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
@@ -46,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
@@ -71,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)
@@ -106,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)
            
@@ -114,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)
@@ -142,6 +183,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)
@@ -173,6 +217,33 @@
        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)
@@ -189,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
@@ -270,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:
@@ -295,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)
@@ -316,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)
@@ -364,9 +462,21 @@
        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)