private void Loop() { try { while (CenterClientApi.IsRun()) { long curTime = TimeUtility.GetLocalMilliseconds(); if (m_LastTickTime != 0) { long elapsedTickTime = curTime - m_LastTickTime; if (elapsedTickTime > c_WarningTickTime) { LogSys.Log(LOG_TYPE.MONITOR, "DataCache Network Tick:{0}", curTime - m_LastTickTime); } } m_LastTickTime = curTime; CenterClientApi.Tick(); Thread.Sleep(10); if (m_WaitQuit) { if (PersistentSystem.Instance.StartLastSaveResult == PersistentSystem.SaveState.Failed) { //发起存盘操作失败,重置m_WaitQuit m_WaitQuit = false; } if (PersistentSystem.Instance.LastSaveState == PersistentSystem.SaveState.Success) { LogSys.Log(LOG_TYPE.MONITOR, "DataCache LastSave Success. DataCache quit ..."); Thread.Sleep(10000); CenterClientApi.Quit(); } else if (PersistentSystem.Instance.LastSaveState == PersistentSystem.SaveState.Failed) { LogSys.Log(LOG_TYPE.MONITOR, "DataCache LastSave Failed. DataCache NOT quit ..."); PersistentSystem.Instance.LastSaveState = PersistentSystem.SaveState.Initial; m_WaitQuit = false; } } if (m_LastEchoTime + 5000 < curTime) { m_LastEchoTime = curTime; CenterClientApi.SendCommandByName("DataCache", "Echo"); } } } catch (Exception ex) { LogSys.Log(LOG_TYPE.ERROR, "DataCache.Loop throw exception:{0}\n{1}", ex.Message, ex.StackTrace); } }
internal void DoCloseServers() { CenterClientApi.SendCommandByName("NodeJs1", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs2", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs3", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs4", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs5", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs6", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs7", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs8", "QuitNodeJs"); CenterClientApi.SendCommandByName("NodeJs9", "QuitNodeJs"); CenterClientApi.SendCommandByName("RoomSvr1", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr2", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr3", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr4", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr5", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr6", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr11", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr12", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr13", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr14", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr15", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr16", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr21", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr22", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr23", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr24", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr25", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr26", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr31", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr32", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr33", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr34", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr35", "QuitRoomServer"); CenterClientApi.SendCommandByName("RoomSvr36", "QuitRoomServer"); CenterClientApi.SendCommandByName("GmServer", "QuitGmServer"); }
private void Loop() { try { while (CenterHubApi.IsRun()) { long curTime = TimeUtility.GetLocalMilliseconds(); if (m_LastTickTime != 0) { long elapsedTickTime = curTime - m_LastTickTime; if (elapsedTickTime > c_WarningTickTime) { LogSys.Log(LOG_TYPE.MONITOR, "GameFramework Network Tick:{0}", curTime - m_LastTickTime); } } m_LastTickTime = curTime; CenterHubApi.Tick(); Thread.Sleep(10); if (m_WaitQuit) { if (m_GlobalProcessThread.LastSaveFinished && m_UserProcessScheduler.LastSaveFinished && m_QuitFinish == false) { //全局数据和玩家数据存储完毕 int saveReqCount = m_DataCacheThread.CalcSaveRequestCount(); LogSys.Log(LOG_TYPE.MONITOR, "QuitStep_1. GlobalData and UserData last save done. SaveRequestCount:{0}", saveReqCount); if (saveReqCount > 0) { //等待5s long startTime = TimeUtility.GetLocalMilliseconds(); while (startTime + 5000 > TimeUtility.GetLocalMilliseconds()) { CenterClientApi.Tick(); Thread.Sleep(10); } } else { //通知关闭DataCache m_QuitFinish = true; LogSys.Log(LOG_TYPE.MONITOR, "QuitStep_2. Notice DataCache to quit."); CenterClientApi.SendCommandByName("DataCache", "QuitDataStore"); //等待10s long startTime = TimeUtility.GetLocalMilliseconds(); while (startTime + 10000 > TimeUtility.GetLocalMilliseconds()) { CenterClientApi.Tick(); Thread.Sleep(10); } //关闭GameFramework LogSys.Log(LOG_TYPE.MONITOR, "QuitStep_3. LastSaveDone. GameFramework quit..."); CenterClientApi.Quit(); } } else { if (curTime - m_LastWaitQuitTime > c_WaitQuitTimeInterval) { m_WaitQuit = false; LogSys.Log(LOG_TYPE.MONITOR, "QuitStep_-1. Reset m_WaitQuit to false."); } } } } } catch (Exception ex) { LogSys.Log(LOG_TYPE.ERROR, "GameFramework.Loop throw exception:{0}\n{1}", ex.Message, ex.StackTrace); } }