#!/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 PlayerControl
|
import IPY_GameServer
|
import CrossRealmPlayer
|
import CrossRealmPK
|
import GMShell
|
|
import traceback
|
|
def SendMsgToCrossServer(msgType, dataMsg):
|
## ·¢ËÍÐÅÏ¢µ½¿ç·þ·þÎñÆ÷ÉÏ
|
if GameWorld.IsCrossServer():
|
return
|
if not dataMsg:
|
return
|
sendMsg = str({"MsgType":msgType, "Data":dataMsg, "ServerGroupID":GameWorld.GetServerGroupID()})
|
GameWorld.Log("SendMsgToCrossServer => %s" % (sendMsg))
|
GameWorld.GetGameWorld().SendMergerChildToCenterStringData(sendMsg, len(sendMsg))
|
return
|
|
def OnCrossServerReceiveMsg(recvMsg, tick):
|
## ¿ç·þ·þÎñÆ÷ÊÕµ½ÐÅÏ¢´¦Àí
|
try:
|
GameWorld.Log("OnCrossServerReceiveMsg: %s" % recvMsg)
|
msgDict = eval(recvMsg)
|
|
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_PKCancel:
|
CrossRealmPK.ClientServerMsg_PKCancel(msgData, tick)
|
|
elif msgType == ShareDefine.ClientServerMsg_PKPrepareOK:
|
CrossRealmPK.ClientServerMsg_PKPrepareOK(msgData, tick)
|
|
elif msgType == ShareDefine.ClientServerMsg_GMCMD:
|
GMShell.ClientServerMsg_GMCMD(msgData, tick)
|
|
elif msgType == ShareDefine.ClientServerMsg_ServerInitOK:
|
ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick)
|
|
else:
|
GameWorld.ErrLog("ûÓиÃÐÅÏ¢ÀàÐÍÂß¼´¦Àí£¡")
|
|
except:
|
GameWorld.ErrLog("OnCrossServerReceiveMsg:%s; except:%s" % (recvMsg, traceback.format_exc()))
|
if GameWorld.GetGameWorld().GetDebugLevel():
|
raise BaseException(str(traceback.format_exc()))
|
return
|
|
def ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick):
|
''' ÊÕµ½×Ó·þÆô¶¯³É¹¦Í¨Öª
|
µ±×Ó·þÆô¶¯³É¹¦ºó£¬¿Éͬ²½Ò»´Î¿ç·þ·þÎñÆ÷»î¶¯×´Ì¬¼°»î¶¯Êý¾Ý¸ø×Ó·þ
|
'''
|
GameWorld.Log("ÊÕµ½¿ç·þ×Ó·þÆô¶¯³É¹¦Í¨Öª!")
|
CrossRealmPK.ClientServerMsg_ServerInitOK(serverGroupID, tick)
|
return
|
|
## ================================================================================================
|
|
def SendMsgToClientServer(msgType, dataMsg, serverGroupIDList=[]):
|
''' ¹ã²¥ÐÅÏ¢µ½×Ó·þÎñÆ÷ÉÏ
|
@param serverGroupIDList: ·¢ËÍÖ¸¶¨µÄ·þÎñÆ÷×éIDÁÐ±í£¬ÄÚ²¿ÒѾÕë¶ÔÁбíÖÐ×éIDÈ¥ÖØ£¬
|
ËùÒÔÍⲿÂß¼¿ÉÖ±½ÓÌí¼Ó£¬²»Óÿ¼ÂÇ×éIDÖØ¸´ÎÊÌ⣬ûÓÐÖ¸¶¨·þÎñÆ÷×éIDʱ£¬Ä¬ÈϹ㲥ËùÓÐ×Ó·þ
|
'''
|
if not GameWorld.IsCrossServer():
|
return
|
if not dataMsg:
|
return
|
sendMsg = str({"MsgType":msgType, "Data":dataMsg})
|
GameWorld.Log("SendMsgToClientServer => serverGroupIDList=%s, sendMsg=%s" % (serverGroupIDList, sendMsg))
|
if not serverGroupIDList:
|
GameWorld.GetGameWorld().SendBroadcastMergeClient(sendMsg)
|
else:
|
serverGroupIDList = list(set(serverGroupIDList)) # È¥ÖØ
|
for serverGroupID in serverGroupIDList:
|
GameWorld.GetGameWorld().SendMergeMsgToClientByGroupID(serverGroupID, sendMsg)
|
return
|
|
def OnClientServerReceiveMsg(index, tick):
|
## ×Ó·þÊÕµ½¿ç·þ·þÎñÆ÷ÐÅÏ¢
|
dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient()
|
dataMsg = dataPack.GetData()
|
GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg)
|
|
try:
|
msgDict = eval(dataMsg)
|
msgType = msgDict.get("MsgType", -1)
|
msgData = msgDict.get("Data", "")
|
|
if msgType == ShareDefine.CrossServerMsg_ExitCrossServer:
|
CrossRealmPlayer.CrossServerMsg_ExitCrossServer(msgData)
|
|
elif msgType == ShareDefine.CrossServerMsg_Notify:
|
PlayerControl.CrossServerMsg_Notify(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)
|
|
else:
|
GameWorld.ErrLog("ûÓиÃÐÅÏ¢ÀàÐÍÂß¼´¦Àí£¡")
|
|
except:
|
GameWorld.ErrLog("OnClientServerReceiveMsg:%s; except:%s" % (dataMsg, traceback.format_exc()))
|
if GameWorld.GetGameWorld().GetDebugLevel():
|
raise BaseException(str(traceback.format_exc()))
|
|
return
|
|