int CAuxHandle::Run() { m_bHandleRun = true; while(1) { if (unlikely(m_iRunStatus == rt_stopped)) break; // 1ms if((m_Main2MePipe.GetCodeLength() == 0) && (m_pSvr2MePipe->GetCodeLength() == 0)) m_stEPollFlowUp.Wait(1); else m_stEPollFlowUp.Wait(0); //每次循环取一次 gettimeofday(&m_tNow,NULL); //读取客户端包 CheckClientMessage(); //读取主线程包 CheckMainMessage(); //读取服务器端包 CheckSvrMessage(); //检测通讯超时 CheckTimeOut(); } m_bHandleRun = false; return 0; }
void CDNSChildWorker::TimeOutWork() { //检测和DCS的链接状态 if(m_DcsNodeFd.moNetStat == TCP_CLOSED) { TRACE(1, "CDNSChildWorker::TimeOutWork 和DCS链接断开了。"); } uint64 time_now = CTimeBase::get_current_time(); //发送存活 if(time_now > m_i64LastKeepLive + KEEP_LIVE_TIME_OUT * 1000) { KeepLive(); m_i64LastKeepLive = time_now; } //dump if(time_now > m_i64LastDumpTime + m_pDnsConfig->dump_info_time * 1000) { Dump(); m_i64LastDumpTime = time_now; } //log if(time_now > m_i64LastLogTime + m_pDnsConfig->log_file_update_time*1000) { unsigned int process_id = CCommon::GetProcessId(); char lszLogFileName[255]; memset(lszLogFileName, 0, 255); CFileStream::GetAppPath(lszLogFileName,255); //设置日志文件信息 SET_TRACE_LEVEL(5); unsigned liOptions = (CDebugTrace::Timestamp | CDebugTrace::LogLevel & ~CDebugTrace::FileAndLine | CDebugTrace::AppendToFile); SET_TRACE_OPTIONS(GET_TRACE_OPTIONS() | liOptions); strcpy(strrchr(lszLogFileName,'/'),"//DNS_log"); CFileStream::CreatePath(lszLogFileName); char lszFileDate[50]; memset(lszFileDate, 0, 50); time_t loSystemTime; time(&loSystemTime); struct tm* lptm = localtime(&loSystemTime); sprintf(lszFileDate, "//DNS-%u-%4d%02d%02d%02d%02d.log", process_id, 1900+lptm->tm_year,1+lptm->tm_mon,lptm->tm_mday, lptm->tm_hour, lptm->tm_min); strcat(lszLogFileName,lszFileDate); SET_LOG_FILENAME(lszLogFileName); m_i64LastLogTime = time_now; } if(time_now > m_i64LastCheckTimeOut + CRS_DNS_TIMEOUT * 1000) { CheckTimeOut(); //test(); m_i64LastCheckTimeOut = time_now; } }
void TimerThread::Run() { unsigned long long lastCheckTime = GetCurrentTimeMillis(); unsigned long long currentCheckTime = lastCheckTime; while (!m_closed) { currentCheckTime = GetCurrentTimeMillis(); unsigned int elapse = (unsigned int)(currentCheckTime - lastCheckTime); std::list<TimerInfo> timeList; CheckTimeOut(elapse,timeList); if (!timeList.empty()) { std::list<TimerInfo>::iterator it = timeList.begin(); for (; it != timeList.end(); it++) { it->pTimerHandler->OnTimeOut(it->id); } } unsigned long long checkEndTime = GetCurrentTimeMillis(); int sleepTime = m_checkInterval - (int)(checkEndTime -currentCheckTime); if (sleepTime < 0) { sleepTime = 0; } lastCheckTime = currentCheckTime; try { kpr::ScopedLock<kpr::Monitor> lock(*this); Wait(sleepTime); } catch (...) { } } }
int CMainCtrl::Run() { while(1) { if(Flag_Exit == m_iRunFlag) { TLib_Log_LogMsg("Server Exit!\n"); return 0; } if(Flag_ReloadCfg == m_iRunFlag) { ReadCfgFile(m_stConfig.m_szCfgFileName); TLib_Log_LogMsg("reload config file ok!\n"); m_iRunFlag = 0; } // 1ms if(m_Svr2MePipe.GetCodeLength() == 0) m_stEPollFlow.Wait(1); else m_stEPollFlow.Wait(0); //每次循环取一次 gettimeofday(&m_tNow,NULL); //读取客户端包 CheckClientMessage(); //读取服务器端包 CheckSvrMessage(); //检测通讯超时 CheckTimeOut(); //写统计 WriteStat(); } return 0; }
/******************************************************************************* Purpose: This routine manage system initialization state by checking on the LAN link status between RTU and server; and LAN link between two RTUs Input: None Return: None History Name Date Remark ---- ---- ------ Yu, Wei 12-Aug-2004 Initial revision *******************************************************************************/ void GoState3_Initialization(void) { if(g_bRMMServerLinkCheck == true) //Check server link. { clock_gettime(CLOCK_REALTIME, &g_pRTUStatusTable->m_tStartTime); if(g_tRTUStatus.unRTUServerLinkStatus == LINK_FAULTY) { #if ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMM_STATE) printf("WARN [RMM] GoState3_Initialization, server link faulty\n"); #endif // ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMMLINK) if(CheckTimeOut(g_tRTUConfig.nInitLANCheckTimeout) == true) { //Timeout. Confirm the link down. g_bRMMServerLinkCheck = false; //Check link status between RTU. g_bRMMOtherRTULinkCheck = true; ActivateTimeOut(); } }else{ #if ((defined CFG_DEBUG_MSG) && CFG_DEBUG_RMM_STATE) printf("[RMM] GoState3_Initialization, server link healthy, change state " "to STATEFLAG_STANDBY\n"); #endif // ((defined CFG_PRN_WARN) && (CFG_DEBUG_RMM)) //Server link is OK, goto standby state. g_bRTUInitLinkCheck = false; ChangeStateTo(STATEFLAG_STANDBY); } } if(g_bRMMOtherRTULinkCheck == true) { if((CheckTimeOut(SOCKET_CONNECT_TIMEOUT *2 - g_tRTUConfig.nInitLANCheckTimeout) == true) || (g_tRTUConfig.nInitLANCheckTimeout >= SOCKET_CONNECT_TIMEOUT*2) || (g_tRTUStatus.abOtherLinkStatus[0] == true) || (g_tRTUStatus.abOtherLinkStatus[1] == true)) { //Check LAN 2 link if(g_tRTUStatus.abOtherLinkStatus[0] == false) { //Check LAN 1 link if(g_tRTUStatus.abOtherLinkStatus[1] == false) { #if ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMM_STATE) printf("WARN [RMM] GoState3_Initialization, both RTU-RTU LAN links " "down, change to STATEFLAG_STANDBY\n"); #endif // ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMMLINK) //Two link are down. Set to standby state. g_bRTUInitLinkCheck = false; ChangeStateTo(STATEFLAG_STANDBY); }else{ //Link2 between RTU is OK //Stop check RTU link. g_bRMMOtherRTULinkCheck = false; } } else { #if ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMM_STATE) printf("WARN [RMM] GoState3_Initialization, at least one RTU-RTU LAN " "link is healthy other is down\n"); #endif // ((defined CFG_PRN_WARN) && (CFG_DEBUG_RMM)) //Link1 between RTU is OK //Stop check RTU link. g_bRMMOtherRTULinkCheck = false; } }// //Stop check RTU link. if(g_bRMMOtherRTULinkCheck == false) { // check the role of other RTU. If other RTU is on standby, set RTU to // primary; otherwise, set RTU to standby if(g_pRTUStatusTable->m_nOtherRTUStateFlag == STATEFLAG_PRIMARY) { #if ((defined CFG_DEBUG_MSG) && CFG_DEBUG_RMM_STATE) printf("[RMM] GoState3_Initialization, other RTU is on Primary " "set local RTU to standby\n"); #endif // ((defined CFG_DEBUG_MSG) && CFG_DEBUG_RMM_STATE) g_bRTUInitLinkCheck = false; ChangeStateTo(STATEFLAG_STANDBY); }else if(g_pRTUStatusTable->m_nOtherRTUStateFlag == STATEFLAG_STANDBY){ #if ((defined CFG_DEBUG_MSG) && CFG_DEBUG_RMM_STATE) printf("[RMM] GoState3_Initialization, other RTU is on Standby " "set local RTU to Primary\n"); #endif // ((defined CFG_DEBUG_MSG) && CFG_DEBUG_RMM_STATE) g_pRTUStatusTable->m_bSWCSwitchCompletedFlag = true ;//2008 ChangeStateTo(STATEFLAG_PRIMARY); }else{ #if ((defined CFG_PRN_WARN) && (CFG_PRN_WARN_RMM_STATE)) printf("WARN [RMM] GoState3_Initialization, cannot determine other RTU " "role set local RTU to Standby\n"); #endif // ((defined CFG_PRN_WARN) && (CFG_DEBUG_RMM)) g_bRTUInitLinkCheck = false; ChangeStateTo(STATEFLAG_STANDBY); } }// if(g_bRMMOtherRTULinkCheck == false) }// if(g_bRMMOtherRTULinkCheck == true) }// GoState3_Initialization
/******************************************************************************* Purpose: Primary state. History Name Date Remark ---- ---- ------ Bryan Chong 28-Jun-2010 Update to include timeout for server which is correspondent to LAN1_TIME_OUT *******************************************************************************/ void GoState1_Primary(void) { //If link between RTU is not down, auto switching will implement. if((g_tRTUStatus.abOtherLinkStatus[0] == true) || (g_tRTUStatus.abOtherLinkStatus[1] == true)) { //SWC link down processing completed or not in SWC link down status. //When primary RTU link down, m_bSWCLinkDownProcessFlag will set to true, //When standby RTU completed link check, the flag will set to false. if(g_pRTUStatusTable->m_bSWCLinkDownProcessFlag == false) { if(g_tRTUStatus.unRTUServerLinkStatus != g_pRTUStatusTable->m_unOtherRTUServerLinkStatus) { //RTU1 and RTU2 server link is same. (All are Link OK or Link down) if(g_tRTUStatus.unRTUServerLinkStatus == LINK_FAULTY) { #if ((defined CFG_DEBUG_MSG) && \ (CFG_DEBUG_RMM || CFG_DEBUG_RMMLINKCHK)) printf("[RMM] GoState1_Primary, PtoS, due to server link faulty\n"); #endif // ((defined CFG_DEBUG_MSG) && (CFG_DEBUG_RMMLINK) ChangeStateTo(STATEFLAG_SWITCHING_PTOS); //040322 Yu Wei } } else if(g_bRTUInitLinkCheck == false) { if(g_pRTUStatusTable->m_unSWCWeight < g_pRTUStatusTable->m_unOtherSWCWeight) { #if ((defined CFG_DEBUG_MSG) && \ (CFG_DEBUG_RMM || CFG_DEBUG_RMMLINKCHK)) printf("[RMM] GoState1_Primary, PtoS,\n" " local RTU notation, %d, > other RTU, %d\n", g_pRTUStatusTable->m_unSWCWeight, g_pRTUStatusTable->m_unOtherSWCWeight); #endif // ((defined CFG_DEBUG_MSG) && (CFG_DEBUG_RMMLINK) ChangeStateTo(STATEFLAG_SWITCHING_PTOS); //040322 Yu Wei g_nWeightDoubleCheck = 0; } else { if (g_nWeightDoubleCheck != 0) g_nWeightDoubleCheck = 0; StandbyRTUImproveCheck(); } } } else { //primary RTU link down , standby RTU has'n completed link check g_pRTUStatusTable->CheckSWCLinkStop(); } g_pRTUStatusTable->m_unOtherRTUServerLinkStatusPrev = g_pRTUStatusTable->m_unOtherRTUServerLinkStatus; g_pRTUStatusTable->m_unOtherSWCWeightPrev = g_pRTUStatusTable->m_unOtherSWCWeight; ActivateTimeOut(); } else if((g_tRTUStatus.unRTUServerLinkStatus == LINK_FAULTY) && (CheckTimeOut(SOCKET_CONNECT_TIMEOUT*1.5) == true)) //kvmrt 20131028 Su { #if ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMMLINK) printf("[RMM] GoState1_Primary, PtoS, due to server link faulty and\n" " SOCKET_CONNECT_TIMEOUT %d sec\n", SOCKET_CONNECT_TIMEOUT); #endif // ((defined CFG_PRN_WARN) && CFG_PRN_WARN_RMMLINK) ChangeStateTo(STATEFLAG_SWITCHING_PTOS); //040322 Yu Wei } else if(g_pRTUStatusTable->m_bSWCLinkDownProcessFlag == true) { g_pRTUStatusTable->SetSWCLinkStart(); } }// GoState1_Primary