| | |
| | | import GameWorld
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import CrossLuckyCloudBuy
|
| | | import IPY_GameServer
|
| | | import CrossRealmPlayer
|
| | | import PlayerCompensation
|
| | |
| | | import CrossRealmPK
|
| | | import PlayerQuery
|
| | | import PlayerTalk
|
| | | import PyGameData
|
| | | import CrossBoss
|
| | | import ChConfig
|
| | | import PlayerFB
|
| | |
| | |
|
| | | import traceback
|
| | | import cPickle
|
| | | import time
|
| | |
|
| | | def SendMsgToCrossServer(msgType, dataMsg):
|
| | | ## 发送信息到跨服服务器上
|
| | |
| | |
|
| | | elif msgType == ShareDefine.ClientServerMsg_PKBillboard:
|
| | | CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)
|
| | | |
| | | elif msgType == ShareDefine.ClientServerMsg_LuckyCloudBuy:
|
| | | CrossLuckyCloudBuy.ClientServerMsg_LuckyCloudBuy(serverGroupID, msgData)
|
| | |
|
| | | elif msgType == ShareDefine.ClientServerMsg_QueryBillboard:
|
| | | CrossBillboard.ClientServerMsg_QueryBillboard(serverGroupID, msgData)
|
| | |
| | | CrossRealmPlayer.Sync_CrossCommInitDataToClientServer(serverGroupID)
|
| | | CrossRealmPK.Sync_CrossPKInitDataToClientServer(tick, serverGroupID)
|
| | | CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID)
|
| | | CrossLuckyCloudBuy.Sync_LuckyCloudBuyDataToClientServer(tick, serverGroupID)
|
| | | CrossActionControl.Sync_CrossActInfoToClientServer(serverGroupID)
|
| | | PlayerCompensation.Sync_CrossMailPlayerIDToClientServer(serverGroupID)
|
| | | return
|
| | |
| | | if not dataMsg:
|
| | | return
|
| | |
|
| | | srcMsg = {"MsgType":msgType, "Data":dataMsg}
|
| | | srcMsg = {"MsgType":msgType, "Data":dataMsg, "CrossServerTime":GameWorld.GetCurrentDataTimeStr()}
|
| | | sendMsg = cPickle.dumps(srcMsg, 2)
|
| | | if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
|
| | | GameWorld.ErrLog("跨服服务器未启动好,不允许向子服发送数据! serverGroupIDList=%s, srcMsg=%s" % (serverGroupIDList, srcMsg))
|
| | |
| | | msgDict = cPickle.loads(dataMsg)
|
| | | msgType = msgDict.get("MsgType", -1)
|
| | | msgData = msgDict.get("Data", "")
|
| | | crossServerTimeStr = msgDict.get("CrossServerTime", "")
|
| | | GameWorld.Log("OnClientServerReceiveMsg: %s" % msgDict)
|
| | | |
| | | if crossServerTimeStr:
|
| | | curServerTime = int(time.time())
|
| | | crossServerTime = GameWorld.ChangeTimeStrToNum(crossServerTimeStr)
|
| | | curServerCrossServerTime = GameWorld.ChangeTimeStrToNum(GameWorld.GetCrossServerTimeStr())
|
| | | diffSeconds = curServerCrossServerTime - crossServerTime# 本服计算误差
|
| | | |
| | | _, _, syncMapTime = PyGameData.g_crossServerTimeInfo
|
| | | PyGameData.g_crossServerTimeInfo = [crossServerTime, curServerTime, syncMapTime]
|
| | | if curServerTime - syncMapTime >= 600 or abs(diffSeconds) >= 30 or msgType == ShareDefine.CrossServerMsg_CrossServerTime: # 一定时间同步地图一次 或计算 误差超过30秒 或强制同步时间的
|
| | | GameWorld.DebugLog("同步地图跨服服务器时间时,本服与跨服服务器时间计算误差! diffSeconds=%s" % (diffSeconds))
|
| | | syncMapTime = curServerTime
|
| | | PyGameData.g_crossServerTimeInfo = [crossServerTime, curServerTime, syncMapTime]
|
| | | GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossServerTime, PyGameData.g_crossServerTimeInfo)
|
| | | |
| | | if msgType == ShareDefine.CrossServerMsg_ExitCrossServer:
|
| | | CrossRealmPlayer.CrossServerMsg_ExitCrossServer(msgData)
|
| | |
|
| | |
| | |
|
| | | elif msgType == ShareDefine.CrossServerMsg_PKSyncBillboard:
|
| | | CrossRealmPK.CrossServerMsg_PKSyncBillboard(msgData)
|
| | | |
| | | elif msgType == ShareDefine.CrossServerMsg_LuckyCloudBuyLottery:
|
| | | CrossLuckyCloudBuy.CrossServerMsg_LuckyCloudBuyLottery(msgData)
|
| | | |
| | | elif msgType == ShareDefine.CrossServerMsg_LuckyCloudBuyNum:
|
| | | CrossLuckyCloudBuy.CrossServerMsg_LuckyCloudBuyNum(msgData)
|
| | |
|
| | | elif msgType == ShareDefine.CrossServerMsg_SyncBillboard:
|
| | | CrossBillboard.CrossServerMsg_SyncBillboard(msgData, tick)
|
| | |
| | | elif msgType == ShareDefine.CrossServerMsg_CrossServerState:
|
| | | CrossRealmPlayer.CrossServerMsg_CrossServerState(msgData)
|
| | |
|
| | | elif msgType == ShareDefine.CrossServerMsg_CrossServerTime:
|
| | | playerID = msgData.get("PlayerID")
|
| | | if playerID:
|
| | | tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
| | | if tagPlayer:
|
| | | GameWorld.DebugAnswer(tagPlayer, "跨服服务器时间: %s" % GameWorld.GetCrossServerTimeStr())
|
| | | |
| | | else:
|
| | | GameWorld.ErrLog("没有该信息类型逻辑处理!")
|
| | |
|