#!/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
|
import json
|
|
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_PKBillboard:
|
CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)
|
|
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)
|
jsonGroupIDInfo = json.dumps(serverGroupIDList, ensure_ascii=False)
|
GameWorld.GetGameWorld().SendMergeMsgToClientByGroupList(jsonGroupIDInfo, 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)
|
|
elif msgType == ShareDefine.CrossServerMsg_PKSeasonInfo:
|
CrossRealmPK.CrossServerMsg_PKSeasonInfo(msgData)
|
|
elif msgType == ShareDefine.CrossServerMsg_PKSyncBillboard:
|
CrossRealmPK.CrossServerMsg_PKSyncBillboard(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
|
|
|
# Á¬½Ó¿ç·þ·þÎñÆ÷״̬
|
# 1 ΪÁ¬½Ó³É¹¦; ÆäËûΪʧ°Ü£¬Ê§°Ü»áÑÓ³Ù֪ͨ
|
def OnConnCorossServer(index, tick):
|
## ×Ó·þÊÕµ½¿ç·þ·þÎñÆ÷ÐÅÏ¢
|
dataPack = IPY_GameServer.IPY_LGCrossLoginResult()
|
result = dataPack.GetResult()
|
if result != 1:
|
GameWorld.Log("--OnClientServerReceiveMsg disconn")
|
return
|
|
GameWorld.Log("OnConnCorossServer conn success!!!")
|
serverGroupID = GameWorld.GetServerGroupID()
|
if GameWorld.IsCrossRealmOpen() and not GameWorld.IsCrossServer():
|
GameWorld.Log("֪ͨ¿ç·þÖ÷·þÎñÆ÷Á´½Ó³É¹¦, ¿É½ÓÊÕ×îпç·þ»î¶¯×´Ì¬¼°Êý¾Ý...")
|
dataMsg = {"ServerGroupID":serverGroupID}
|
SendMsgToCrossServer(ShareDefine.ClientServerMsg_ServerInitOK, dataMsg)
|
|
return
|
|
|