예제 #1
0
        public virtual bool StartServer(string strServerName)
        {
            ServerInfo refServerInfo = m_refServerInfoMgr.Find(strServerName);

            if (null == refServerInfo)
            {
                return(false);
            }

            if (0 == refServerInfo.WorldID || 0 == refServerInfo.ServerID)
            {
                m_refMonitoringLoggerMgr.Write(strServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.FAILED_START_SERVER_ERROR);
                return(false);
            }

            if (PROCESS_STATE.RUNNING == refServerInfo.ProcessState || PROCESS_STATE.STARTING == refServerInfo.ProcessState)
            {
                m_refMonitoringLoggerMgr.Write(strServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.FAILED_START_SERVER_ALREADY_START);
                return(false);
            }

            int nProcessID;

            if (m_refProcessSystem.StartProcess(refServerInfo.ExePath, out nProcessID) == false)
            {
                FileLog.Instance.Write("실패! ServerController.StartServer(), 서버 프로세스를 시작하지 못했습니다. (ServerName={0}, ExePath={1})", strServerName, refServerInfo.ExePath);
                m_refMonitoringLoggerMgr.Write(strServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.FAILED_START_SERVER_PROCESS);
                return(false);
            }

            refServerInfo.SetProcessStarting(nProcessID);

            m_refMonitoringLoggerMgr.Write(strServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.STARTING_SERVER);
            return(true);
        }
        public bool Update(float fDelta)
        {
            if (false == m_rgltDelayToCheck.IsReady(fDelta))
            {
                return(false);
            }

            bool bIsChangineState = false;

            LinkedListNode <ServerInfo> node = m_refServerInfoMgr.ServerInfoList.First;

            for (; node != null; node = node.Next)
            {
                ServerInfo refServerInfo = node.Value;

                if (refServerInfo.ProcessState != PROCESS_STATE.RUNNING)
                {
                    continue;
                }

                SERVABLE_STATE eServableState = (refServerInfo.IsServable ? SERVABLE_STATE.ACTIVE : SERVABLE_STATE.INACTIVE);

                if (refServerInfo.ServableState == eServableState)
                {
                    continue;
                }

                if (SERVABLE_STATE.INACTIVE == refServerInfo.ServableState &&
                    SERVABLE_STATE.ACTIVE == eServableState)
                {
                    m_refMinitoringLoggerMgr.Write(refServerInfo.ServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.SERVER_ACTIVE);
                }
                else if (SERVABLE_STATE.ACTIVE == refServerInfo.ServableState &&
                         SERVABLE_STATE.INACTIVE == eServableState)
                {
                    m_refMinitoringLoggerMgr.Write(refServerInfo.ServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.SERVER_INACTIVE);
                }

                refServerInfo.SetServableState(eServableState);
                bIsChangineState = true;
            }

            return(bIsChangineState);
        }
예제 #3
0
 private bool CheckAndUpdate_SuccessStart(ServerInfo refServerInfo, bool bIsRunningProcess, bool bIsDBRun)
 {
     if (refServerInfo.ProcessState == PROCESS_STATE.STARTING && bIsRunningProcess == true && bIsDBRun == true)
     {
         refServerInfo.SetProcessRunning();
         m_refMonitoringLoggerMgr.Write(refServerInfo.ServerName, refServerInfo.WorldID, refServerInfo.ServerID, LogID.SUCCESS_START_SERVER);
         return(true);
     }
     return(false);
 }