Exemple #1
0
    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);
            }
        }