#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package GameWorldLogic.CrossMsg # # @todo:¿ç·þͨѶÐÅÏ¢ # @author hxp # @date 2026-02-04 # @version 1.0 # # ÏêϸÃèÊö: ¿ç·þͨѶÐÅÏ¢ # #------------------------------------------------------------------------------- #"""Version = 2026-02-04 19:00""" #------------------------------------------------------------------------------- import DBFamily import GameWorld import PlayerMail import ShareDefine import NetPackCommon import ChServerToServerPyPack import PlayerViewCache import PlayerFamily import CrossPlayer import TurnAttack import PyGameData import ChPlayer import traceback import cPickle import time def SendToCrossServer(msgType, dataMsg, serverIDList=None, playerID=0): ## ÓÎÏ··þ·¢ËÍÐÅÏ¢µ½¿ç·þ·þÎñÆ÷ if GameWorld.IsCrossServer(): return #if not dataMsg: # return logData = "" if msgType in ShareDefine.NoLogDataSSMsgTypes else dataMsg if msgType == ShareDefine.S2C_FamilyPyPack: logData = "%s%s" % (dataMsg["funcName"], logData) GameWorld.Log("SendToCrossServer => %s, %s, %s" % (msgType, serverIDList, logData), playerID) SendToServer(msgType, dataMsg, serverIDList, ShareDefine.dirType_Cross, playerID, isLog=False) return def SendToClientServer(msgType, dataMsg, serverIDList=None, playerID=0): ''' ¿ç·þ·¢ËÍÐÅÏ¢µ½×ÓÓÎÏ··þÎñÆ÷ @param serverGroupIDList: ·¢ËÍÖ¸¶¨µÄ·þÎñÆ÷×éIDÁÐ±í£¬ÄÚ²¿ÒѾ­Õë¶ÔÁбíÖÐ×éIDÈ¥ÖØ£¬ ËùÒÔÍⲿÂß¼­¿ÉÖ±½ÓÌí¼Ó£¬²»Óÿ¼ÂÇ×éIDÖØ¸´ÎÊÌ⣬ûÓÐÖ¸¶¨·þÎñÆ÷×éIDʱ£¬Ä¬ÈϹ㲥ËùÓÐ×Ó·þ ''' if not GameWorld.IsCrossServer(): return #if not dataMsg: # return logData = "" if msgType in ShareDefine.NoLogDataSSMsgTypes else dataMsg if msgType == ShareDefine.C2S_SendFakePack: logData = "%s%s" % (dataMsg["packHead"], logData) GameWorld.Log("SendToClientServer => %s, %s, %s" % (msgType, serverIDList, logData), playerID) SendToServer(msgType, dataMsg, serverIDList, ShareDefine.dirType_Main, playerID, isLog=False) # ĬÈÏ·¢¸øÖ÷·þ¼´¿É return def SendBackServer(msgType, dataMsg, serverID, serverType, playerID=0): ## ÓÃÓÚ·þÎñÆ÷Ò»¶ÔÒ»»Ø°ü SendToServer(msgType, dataMsg, [serverID], NetPackCommon.GetSSPackDirType(serverType), playerID) return def SendBattleRequest(dataMsg, guid, mapID, funcLineID, reqPlayerID=0): msgType = ShareDefine.S2B_BattleRequest GameWorld.Log("SendToBattleServer => %s, funcMapID=%s,funcLineID=%s,%s,%s" % (msgType, mapID, funcLineID, guid, time.time()), reqPlayerID) SendToServer(msgType, dataMsg, dirType=ShareDefine.dirType_Battle, playerID=reqPlayerID, isLog=False) return def SendBattleResult(retInfo, fromServerID, guid, mapID, funcLineID, reqPlayerID=0): msgType = ShareDefine.B2S_BattleResult GameWorld.Log("SendToFromServer => %s, fromServerID=%s,funcMapID=%s,funcLineID=%s,%s,%s" % (msgType, fromServerID, mapID, funcLineID, guid, time.time()), reqPlayerID) SendToServer(msgType, retInfo, [fromServerID], ShareDefine.dirType_Main, reqPlayerID, isLog=False) return def SendToServer(msgType, dataMsg, serverIDList=None, dirType=ShareDefine.dirType_Main, playerID=0, isLog=True): '''·¢Ë͸øÆäËû·þÎñÆ÷ @param msgType: ¹¦ÄÜÐÅÏ¢ÀàÐÍ×Ö·û¶¨Òå @param dataMsg: ·¢Ë͵ÄÊý¾Ý£¬ÈÎÒâ¸ñʽ£¬Óɹ¦ÄÜ×ÔÐоö¶¨ @param serverIDList: Ö¸¶¨Ä¿±ê·þÎñÆ÷ID »ò ·þÎñÆ÷IDÁбí ''' if not PyGameData.g_serverInitOK: GameWorld.Log("·þÎñÆ÷δÆô¶¯ºÃ£¡²»ÔÊÐíÓëÆäËû·þÎñÆ÷ͨѶ! msgType=%s" % msgType) return if isinstance(serverIDList, int): serverIDList = [serverIDList] elif not isinstance(serverIDList, list): serverIDList = [] #else: # serverIDList = list(set(serverIDList)) # È¥ÖØ if isLog: logData = "" if msgType in ShareDefine.NoLogDataSSMsgTypes else dataMsg GameWorld.Log("SendToServer => %s, %s, %s" % (msgType, serverIDList, logData), playerID) # ЭÒéÒªÓÃ×î¸ß¼¶2£¬¿É¼õÉÙ³¤¶È sendMsg = cPickle.dumps(dataMsg, 2) pack = ChServerToServerPyPack.tagSSCommMsg() pack.FromServerID = GameWorld.GetGameWorld().GetServerID() pack.ServerType = GameWorld.GetServerType() pack.PlayerID = playerID pack.ServerTime = int(time.time()) pack.MsgType = msgType pack.TypeLen = len(pack.MsgType) pack.Data = sendMsg pack.Len = len(pack.Data) NetPackCommon.SendCrossServerToServerPack(pack, serverIDList, dirType) return #// C2 10 ¿ç·þͨÓÃÐÅÏ¢°ü #tagSSCommMsg # #struct tagSSCommMsg #{ # tagHead Head; # DWORD FromServerID; //Äĸö·þ·¢µÄ # BYTE ServerType; //·þÎñÆ÷ÀàÐÍ # DWORD PlayerID; //ÄĸöÍæ¼Ò´¥·¢·¢Ë굀 # BYTE TypeLen; # char MsgType[TypeLen]; # DWORD Len; # char Data[Len]; #}; def OnSSCommMsg(netPack): ## ÊÕµ½ÆäËû·þÎñÆ÷·¢À´µÄÏûÏ¢ fromServerID = netPack.FromServerID serverType = netPack.ServerType playerID = netPack.PlayerID msgType = netPack.MsgType recvMsg = netPack.Data if not PyGameData.g_serverInitOK: GameWorld.Log("·þÎñÆ÷δÆô¶¯ºÃ£¬²»´¦ÀíÆäËû·þÎñÆ÷ÐÅÏ¢! %s, fromServerID=%s" % (msgType, fromServerID)) return if fromServerID == GameWorld.GetGameWorld().GetServerID(): # ²»´¦Àí¸ø×Ô¼º·¢µÄÏûÏ¢ return try: dataMsg = cPickle.loads(recvMsg) logData = "" if msgType in ShareDefine.NoLogDataSSMsgTypes else str(dataMsg) if msgType == ShareDefine.C2S_SendFakePack: logData = "%s%s" % (dataMsg["packHead"], logData) elif msgType == ShareDefine.S2C_FamilyPyPack: logData = "%s%s" % (dataMsg["funcName"], logData) GameWorld.Log("OnSSRecvMsg => %s, fromServerID=%s, %s,time=%s" % (msgType, fromServerID, logData, time.time()), playerID) # ËùÓÐÀàÐÍ·þÎñÆ÷¾ù¿ÉÄÜÊÕµ½µÄÐÅÏ¢ if msgType == ShareDefine.S2B_BattleRequest: # ÇëÇóÕ½¶· TurnAttack.S2B_BattleRequest(dataMsg, fromServerID, msgType) elif msgType == ShareDefine.B2S_BattleResult: # Õ½¶·½á¹û TurnAttack.B2S_BattleResult(dataMsg, fromServerID, msgType) elif msgType == ShareDefine.S2S_ViewTagFamily: # ²é¿´Ä¿±ê¹«»á PlayerFamily.S2S_ViewTagFamily(dataMsg, fromServerID, playerID) elif msgType == ShareDefine.S2S_ViewTagPlayer: # ²é¿´Ä¿±êÍæ¼Ò PlayerViewCache.S2S_ViewTagPlayer(dataMsg, fromServerID, playerID) else: curServerType = GameWorld.GetServerType() ## °´·þÎñÆ÷ÀàÐ͹éÀà´¦ÀíÐèÒª´¦ÀíµÄÐÅÏ¢ÀàÐÍ£¬½øÒ»²½·ÀÖ¹ÐÅÏ¢Îó·¢Îó´¦Àíµ¼ÖµÄÊý¾ÝÎÊÌâ # ¿ç·þ·þÎñÆ÷Òª´¦ÀíµÄÏûÏ¢ if curServerType in [ShareDefine.serverType_CrossCenter, ShareDefine.serverType_Cross]: if msgType == ShareDefine.CC2C_FamilyCrossCfg: # ¹«»á·ÖÇøÅäÖà DBFamily.CC2C_FamilyCrossCfg(dataMsg, fromServerID, serverType) elif msgType == ShareDefine.S2C_PlayerBaseInfo: ChPlayer.S2C_PlayerBaseInfo(dataMsg, fromServerID, playerID) elif msgType == ShareDefine.S2C_OnlineState: # Íæ¼ÒÔÚÏß״̬ ChPlayer.S2C_OnlineState(dataMsg, fromServerID, playerID) elif msgType == ShareDefine.S2C_FamilyData: # Ê×´Îͬ²½¹«»á»¥Í¨Êý¾Ý DBFamily.S2C_FamilyData(dataMsg, fromServerID) elif msgType == ShareDefine.S2C_FamilyPyPack: # ¹«»á¹¦ÄÜÍæ¼ÒÇëÇópy°üת·¢ PlayerFamily.S2C_FamilyPyPack(dataMsg, fromServerID, playerID) # ÓÎÏ··þÎñÆ÷Òª´¦ÀíµÄÏûÏ¢ elif curServerType == ShareDefine.serverType_Main: if msgType == ShareDefine.C2S_FamilyCrossInfo: DBFamily.C2S_FamilyCrossInfo(dataMsg, fromServerID) elif msgType == ShareDefine.C2S_FamilyDataRet: # ͬ²½¹«»á»¥Í¨Êý¾Ý½á¹û»Ø¸´ DBFamily.C2S_FamilyDataRet(dataMsg, fromServerID) #elif msgType == ShareDefine.C2S_PlayerLoginOK: # ChPlayer.C2S_PlayerLoginOK(playerID) elif msgType == ShareDefine.C2S_FamilyMapPlayer: PlayerFamily.C2S_FamilyMapPlayer(dataMsg, playerID) elif msgType == ShareDefine.C2S_FamilyPyPackRet: PlayerFamily.C2S_FamilyPyPackRet(dataMsg, playerID) elif msgType == ShareDefine.C2S_NotifyCode: CrossPlayer.C2S_NotifyCode(dataMsg) elif msgType == ShareDefine.C2S_SendFakePack: CrossPlayer.C2S_SendFakePack(dataMsg) elif msgType == ShareDefine.C2S_CostPlayerResources: CrossPlayer.C2S_CostPlayerResources(dataMsg, playerID) elif msgType == ShareDefine.C2S_GivePlayerResources: CrossPlayer.C2S_GivePlayerResources(dataMsg, playerID) elif msgType == ShareDefine.C2S_SetPlayerNomalDict: CrossPlayer.C2S_SetPlayerNomalDict(dataMsg, playerID) elif msgType == ShareDefine.C2S_SendPlayerMail: PlayerMail.C2S_SendPlayerMail(dataMsg, playerID) elif msgType == ShareDefine.C2S_GMDebugAnswer: GameWorld.C2S_GMDebugAnswer(dataMsg, playerID) except: GameWorld.RaiseException("·þÎñÆ÷½ÓÊÕÐÅÏ¢´¦Àí±¨´í \r\n%s" % str(traceback.format_exc())) return