5563 【英文】【BT】【越南】【砍树】跨服服务器维护优化
| | |
| | | return
|
| | |
|
| | | operate = gmCmdDict.get('operate', '')
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | |
|
| | | # 状态查询
|
| | | if operate == "query":
|
| | |
| | | # 状态更改
|
| | | if operate == "on":
|
| | | CrossRealmPlayer.DoChangeCrossServerState(1)
|
| | | CrossRealmMsg.Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0)
|
| | | elif operate == "off":
|
| | | CrossRealmPlayer.DoChangeCrossServerState(0)
|
| | |
|
| | | # 同步子服
|
| | | elif operate == "sync":
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | CrossRealmMsg.Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0)
|
| | |
|
| | | else:
|
| | |
| | | return
|
| | | if not dataMsg:
|
| | | return
|
| | | |
| | | if msgType not in [ShareDefine.ClientServerMsg_ServerInitOK]:
|
| | | isOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
|
| | | if not isOpen:
|
| | | GameWorld.Log("跨服服务器未开启或维护中不发送消息! SendMsgToCrossServer => %s" % msgType)
|
| | | return
|
| | | # 协议要用最高级2,可减少长度
|
| | | srcMsg = {"MsgType":msgType, "Data":dataMsg, "ServerGroupID":GameWorld.GetServerGroupID()}
|
| | | sendMsg = cPickle.dumps(srcMsg, 2)
|
| | |
| | | 当子服启动成功后,可同步一次跨服服务器活动状态及活动数据给子服
|
| | | '''
|
| | | GameWorld.Log("收到跨服子服连接成功通知! serverGroupID=%s" % serverGroupID)
|
| | | isOpen = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
|
| | | if not isOpen:
|
| | | GameWorld.Log("跨服服务器维护中不处理! serverGroupID=%s" % serverGroupID)
|
| | | return
|
| | | Sync_CrossServerInitDataToClientServer(tick, serverGroupID)
|
| | | return
|
| | |
|
| | |
| | | # @param None
|
| | | # @return None
|
| | | def BeforeClose(tick):
|
| | | if GameWorld.IsCrossServer():
|
| | | CrossRealmPlayer.OnCrossServerClose()
|
| | | PlayerTeam.OnServerClose(tick)
|
| | | ChPlayer.SavePlayerLVData()
|
| | | PlayerFBHelpBattle.OnServerClose()
|
| | |
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossServerState, {"isOpen":isOpen})
|
| | | return
|
| | |
|
| | | def OnCrossServerClose():
|
| | | '''关服时处理
|
| | | 注意关服只需设置关闭状态即可,不调用 DoChangeCrossServerState 改变db状态及其他额外处理
|
| | | db存储的关闭状态为维护状态(可能跨服服务器正常开着,但是运维后台GM手动设置处于维护状态)
|
| | | 通知关服状态主要目的是让子服不再发送消息到跨服服务器了,等待跨服服务器重新开启即可
|
| | | '''
|
| | | isOpen = 0
|
| | | GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerOpen, isOpen)
|
| | | CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossServerState, {"isOpen":isOpen})
|
| | | return
|
| | |
|
| | | def CrossServerMsg_CrossServerState(msgData):
|
| | | ## 子服收到跨服服务器状态变更,子服不存DB,默认跨服维护中,连接跨服成功后由跨服同步状态直接更新到字典即可,没连上就默认维护中
|
| | | if "crossZoneName" in msgData:
|