ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -18,9 +18,11 @@
import GameWorld
import ShareDefine
import PlayerAssist
import PlayerFamily
import PlayerControl
import PlayerPackData
import PlayerFuncTeam
import NetPackCommon
import CrossLuckyCloudBuy
import IPY_GameServer
import PlayerViewCache
@@ -30,11 +32,13 @@
import PlayerActXianXiaMJ
import PlayerActGubao
import PlayerActHorsePetTrain
import PlayerActLianqi
import CrossActionControl
import CrossActAllRecharge
import CrossFamilyFlagwar
import CrossChampionship
import CrossBattlefield
import CrossFamilyGCZ
import CrossBillboard
import CrossYaomoBoss
import GameWorldBoss
@@ -54,6 +58,10 @@
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():
@@ -67,7 +75,16 @@
    if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
        GameWorld.ErrLog("服务器未启动好,不允许向跨服服务器发送数据! %s" % (srcMsg))
        return
    GameWorld.Log("SendMsgToCrossServer => %s, %s" % (msgType, 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
@@ -83,8 +100,17 @@
        msgData = msgDict.get("Data", "")
        serverGroupID = msgDict.get("ServerGroupID", 0)
        
        GameWorld.Log("OnCrossServerReceiveMsg: %s, %s, %s" % (msgType, serverGroupID, msgDict))
        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)
            
@@ -157,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)
            
@@ -195,6 +224,18 @@
            
        elif msgType == ShareDefine.ClientServerMsg_HorsePetTrainScore:
            PlayerActHorsePetTrain.ClientServerMsg_HorsePetTrainScore(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_LianqiScore:
            PlayerActLianqi.ClientServerMsg_LianqiScore(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_SyncFamilyInfo:
            PlayerFamily.ClientServerMsg_SyncFamilyInfo(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_QueryCrossFamily:
            PlayerFamily.ClientServerMsg_QueryCrossFamily(serverGroupID, msgData)
        elif msgType == ShareDefine.ClientServerMsg_FamilyGCZ:
            CrossFamilyGCZ.ClientServerMsg_FamilyGCZ(serverGroupID, msgData)
            
        elif msgType == ShareDefine.ClientServerMsg_CreateFuncTeam:
            PlayerFuncTeam.ClientServerMsg_CreateFuncTeam(serverGroupID, msgData)
@@ -308,7 +349,16 @@
    if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
        GameWorld.ErrLog("跨服服务器未启动好,不允许向子服发送数据! serverGroupIDList=%s, srcMsg=%s" % (serverGroupIDList, srcMsg))
        return
    GameWorld.Log("SendMsgToClientServer => %s, %s, %s" % (msgType, 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:
@@ -333,7 +383,18 @@
        msgType = msgDict.get("MsgType", -1)    
        msgData = msgDict.get("Data", "")
        crossServerTimeStr = msgDict.get("CrossServerTime", "")
        GameWorld.Log("OnClientServerReceiveMsg: %s, %s" % (msgType, 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)
@@ -356,6 +417,9 @@
            
        elif msgType == ShareDefine.CrossServerMsg_PlayerLoginout:
            ChPlayer.CrossServerMsg_PlayerLoginout(msgData)
        elif msgType == ShareDefine.CrossServerMsg_SendFakePack:
            NetPackCommon.CrossServerMsg_SendFakePack(msgData)
            
        elif msgType == ShareDefine.CrossServerMsg_ChatCrossWorld:
            PlayerTalk.CrossServerMsg_ChatCrossWorld(msgData)
@@ -413,6 +477,12 @@
            
        elif msgType == ShareDefine.CrossServerMsg_FuncTeamList:
            PlayerFuncTeam.CrossServerMsg_FuncTeamList(msgData)
        elif msgType == ShareDefine.CrossServerMsg_FamilyDelRet:
            PlayerFamily.CrossServerMsg_FamilyDelRet(msgData)
        elif msgType == ShareDefine.CrossServerMsg_FamilyGCZ:
            CrossFamilyGCZ.CrossServerMsg_FamilyGCZ(msgData)
            
        elif msgType == ShareDefine.CrossServerMsg_Worship:
            GameWorship.CrossServerMsg_Worship(msgData)
@@ -591,5 +661,12 @@
        SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg)
    return
def OnCrossServerStateOpen():
    '''子服收到跨服服务器通知  - 跨服服务器状态正常开放中,可能是启动、重连、或者维护后重新开放
    这里可以处理一些子服与跨服正式建立常规逻辑通讯(注意与socket连接区分,这里指的是逻辑通讯)后的逻辑
    注:跨服子服socket连接后,并不能正式开始逻辑消息通讯,需要等待双方都启动成功后才可以
    即子服发送  ClientServerMsg_ServerInitOK 告知启动成功
    然后跨服回复开启状态后才算正式建立常规逻辑通讯
    '''
    PlayerFamily.Sync_ClientFamilyAllToCrossServer()
    return