void CWiMaxUplinkMgrApp::Run() { while (!CApp::IsStop()) { TouchPidFile(g_pApp->m_szAppPidFile); m_subscriber.Refresh() ; } }
void TasksRunner::Run(int periodTime/*ms*/) { LOG_DEBUG_APP("[TaskRunner]: start running tasks... with time=" << periodTime); CDurationWatcher oDurationWatcher; int i=0; double dMin1, dMin5, dMin15, dTotal; if (GetProcessLoad (dMin1, dMin5, dMin15, dTotal, GET_PROCESS_LOAD_AT_ONE_MIN)) { char szTmp[2048]; sprintf(szTmp, "ProcessLoad: 1/5/15 min: %.2f/%.2f/%.2f total: %.2f", dMin1, dMin5, dMin15, dTotal ); LOG_INFO_APP("" << szTmp); } WATCH_DURATION(oDurationWatcher, 5000, 5000); for (PeriodicTasksList::iterator it = periodicTasks.begin(); it != periodicTasks.end(); ++it) { if(stopTasks) { LOG_INFO_APP("[TaskRunner]: no more tasks running!"); return; } try { (*it)(periodTime); if(WATCH_DURATION_DEF(oDurationWatcher)) { LOG_INFO_APP("Task index in list=" << i); } i++; } catch(std::exception& ex) { LOG_ERROR_APP("[TaskRunner]: Run automatic task failed. error=" << ex.what()); } catch(...) { LOG_ERROR_APP("[TaskRunner]: Run automatic task failed. unknown error!"); } } #ifdef HW_VR900 TouchPidFile(NIVIS_TMP"MonitorHost.pid"); #endif LOG_DEBUG_APP("[TaskRunner]: stop running tasks."); }
void CSumiNodeTesterApp::Run() { //init if(!g_oUtils.APISendCreateSocket(m_stCfg.GetUdpLocalPort(), g_u8SerialMsgId, m_poBufferedSerialLink)) return; g_u8SerialMsgId++; //receive ACK or NACK CSimpleTimer oTimer(m_stCfg.GetUDPCreateSockTimedoutSec()*1000); int nRecvLen = 0; bool bNoReply = true; while(!oTimer.IsSignaling() && bNoReply) { if( !m_poBufferedSerialLink->IsLinkOpen() || !m_poBufferedSerialLink->HaveData( WAITUS ) ) { continue; } nRecvLen = m_poBufferedSerialLink->Read( g_pucRcvBuf, BUFSIZE ); //check if (nRecvLen <= 0) continue; if (nRecvLen < (int)sizeof(API_MSG_HDR)) { NLOG_ERR("FAILED TO READ MSG HEADER ON SERIAL LINK!"); break; } //process rsp for APISendCreateSocket API_MSG_HDR *pHdr = (API_MSG_HDR*)g_pucRcvBuf; if (!API_GET_IS_RSP_FLAG(pHdr)) { NLOG_WARN("Expected a response for APISendCreateSocket but received a request!"); continue; } switch(API_GET_MSG_CLASS(pHdr)) { case API_ACK: if(API_GET_MESSAGE_ID(pHdr) == (g_u8SerialMsgId - 1)) { NLOG_INFO("UDP PORT %d SUCCESSFULLY OPENED!", m_stCfg.GetUdpLocalPort()); bNoReply = false; } break; case API_NACK: if(API_GET_MESSAGE_ID(pHdr) != (g_u8SerialMsgId - 1)) { continue; } switch(API_GET_TYPE(pHdr)) { case API_UDP_PORT_ALREADY_IN_USE: NLOG_INFO("API_UDP_PORT_ALREADY_IN_USE, UDP port=%d!", m_stCfg.GetUdpLocalPort()); bNoReply = false; break; case API_MAX_SOCKETS_NO_REACHED: NLOG_ERR("API_MAX_SOCKETS_NO_REACHED!"); return; case API_COULD_NOT_CREATE_SOCKET: NLOG_ERR("API_COULD_NOT_CREATE_SOCKET UDP port=%d!", m_stCfg.GetUdpLocalPort()); return; default: NLOG_ERR("UNKNOWN NACK MSG TYPE: %d!", API_GET_TYPE(pHdr)); return; } break; default: NLOG_ERR("UNKNOWN MSG CLASS: %d!", API_GET_MSG_CLASS(pHdr)); return; } } if( bNoReply ) { NLOG_ERR("NO REPLY TO UDP_CREATE_SOCKET!"); return; } //process every received msg CSimpleTimer oUdpSendTimer(m_stCfg.GetUdpSendIntervalSec()* 1000); CSimpleTimer oUdpSentPollTimer(m_stCfg.GetUdpSentPollIntervalSec()*1000); CSimpleTimer oStatisticsTimer(300000); CSimpleTimer oSigFileCheckTimer(m_stCfg.GetSigFileCheckIntervalSec()*1000); while (!CApp::IsStop()) { TouchPidFile(g_pApp->m_szAppPidFile); //On Send UDP EVENT if( oUdpSendTimer.IsSignaling() ) { SendUdpData(); oUdpSendTimer.SetTimer(m_stCfg.GetUdpSendIntervalSec()* 1000); } //On Receive Data EVENT ProcessRcv(); //On Poll Sent UDP Msg EVENT if( oUdpSentPollTimer.IsSignaling()) { g_oSumiStats.PollSentUdpMsg(); oUdpSentPollTimer.SetTimer(m_stCfg.GetUdpSentPollIntervalSec()*1000); } //On Log Statistics EVENT if( oStatisticsTimer.IsSignaling() ) { g_oSumiStats.LogStatistics(); oStatisticsTimer.SetTimer(300000); } //On Check SIG File EVENT if( oSigFileCheckTimer.IsSignaling() ) { CSignalsMgr::Raise( SIGHUP ); oSigFileCheckTimer.SetTimer(m_stCfg.GetSigFileCheckIntervalSec()* 1000); } //On Signals Check EVENT CheckSignals(); } NLOG_INFO("Closing the socket..."); if( !g_oUtils.APISendDeleteSocket(m_stCfg.GetUdpLocalPort(), g_u8SerialMsgId, m_poBufferedSerialLink) ) return; g_u8SerialMsgId++; //receive ACK oTimer.SetTimer(UDP_DELETE_SOCK_TIMEDOUT_MS); nRecvLen = 0; bNoReply = true; while(!oTimer.IsSignaling() && bNoReply) { if( !m_poBufferedSerialLink->IsLinkOpen() || !m_poBufferedSerialLink->HaveData( WAITUS ) ) { continue; } nRecvLen = m_poBufferedSerialLink->Read( g_pucRcvBuf, BUFSIZE ); //check if (nRecvLen <= 0) continue; if (nRecvLen < (int)sizeof(API_MSG_HDR)) { NLOG_ERR("FAILED TO READ MSG HEADER ON SERIAL LINK!"); break; } //process rsp API_MSG_HDR *pHdr = (API_MSG_HDR*)g_pucRcvBuf; if (!API_GET_IS_RSP_FLAG(pHdr)) { NLOG_WARN("Expected a response for APISendDeleteSocket but received a request!"); continue; } switch(API_GET_MSG_CLASS(pHdr)) { case API_ACK: if(API_GET_MESSAGE_ID(pHdr) == (g_u8SerialMsgId - 1)) { NLOG_INFO("UDP PORT %d SUCCESSFULLY CLOSED!", m_stCfg.GetUdpLocalPort()); bNoReply = false; } break; case API_NACK: if(API_GET_MESSAGE_ID(pHdr) != (g_u8SerialMsgId - 1)) { continue; } switch(API_GET_TYPE(pHdr)) { case API_IVALID_DELETE_SOCKET: NLOG_WARN("API_INVALID_DELETE_SOCKET UDP port=%d!", m_stCfg.GetUdpLocalPort()); bNoReply = false; break; default: NLOG_ERR("UNKNOWN NACK MSG TYPE: %d!", API_GET_TYPE(pHdr)); return; } break; default: NLOG_ERR("UNKNOWN MSG CLASS: %d!", API_GET_MSG_CLASS(pHdr)); return; } } if( bNoReply ) { NLOG_ERR("NO REPLY TO UDP_CLOSE_SOCKET!"); return; } }
void CEntryPointApp::Run() { /* * Start all threads */ CEPThread::PtrList::iterator thrIt = m_threadsList.begin(); for (; thrIt != m_threadsList.end(); thrIt++) { (*thrIt)->Start(); } while (!CApp::IsStop()) { TouchPidFile(g_pApp->m_szAppPidFile); // delays of 100-500ms does not matter on the subsc<->NMS dispatcher flow if (m_stCfg.m_bEnableDispSubscribe) m_oSubscToNMS.Refresh(); if (m_sinceCheckTimeout.GetElapsedSec() >= m_stCfg.m_dbCmdTimedoutChkInterval) { if (!m_dbMngt->IsInitialized()) { if (CEPDBFactory::Init("MainApp-Run", m_dbMngt, m_stCfg) == false) { /* maybe next time more successful */ m_sinceCheckTimeout = CMicroSec(); continue; } } RemoveExpiredCmds(); m_sinceCheckTimeout = CMicroSec(); } if(IEPDBMngtBase::DevicesCache.InitStatus() == CDevicesCache::NotInitialized) { m_dbMngt->InitDevicesCache(); } ///show info... if (CSignalsMgr::IsRaised(SIGUSR1)) { LogSS(); SignalThreads(); CSignalsMgr::Reset(SIGUSR1); } if (CSignalsMgr::IsRaised(SIGUSR2)) { m_dbMngt->DevicesCache.Log(); CSignalsMgr::Reset(SIGUSR2); } if (CSignalsMgr::IsRaised(SIGHUP)) { m_stCfg.Reload(); CSignalsMgr::Reset(SIGHUP); } } }
void CRplRootApp::Run() { CSimpleTimer oFarCfgIniTimer; int nFarCfgIniLastModification = GetLastModificationOfFile(FAR_CFG_INI); struct stat statBuffer; registerToNMS(); while (!CApp::IsStop()) { TouchPidFile(g_pApp->m_szAppPidFile); if(stat(NET_DESTROY_LINKB, &statBuffer) == 0) { SimpleMac_SendNetworkDestroy(); remove(NET_DESTROY_LINKB); } // ipv6_stack_poll(); netifs_poll(); udp_ipv6_poll(); #ifdef _6LPND_SUPPORT CheckSignals(); SixLPRPCDiscOutR_RunStep(); continue; #endif if ( m_oConsolidatedMsgCheckTimer.IsSignaling() ) { #ifdef STORING_MODE if ( RplInstance_ModeOfOperation( &g_oRplInstance ) >= MOP_STORING_WITHOUT_MULTICAST && !g_oRplInstance.m_oRplConfig.m_u8TopologyInStoringMode ) { CheckRIBForNotifications( ); } else #endif { if ( !m_shpoCnsDaoMsg->OptionListEmpty( ) ) { m_pMgmtClientLink->SendMessage( m_shpoCnsDaoMsg ); // clear message -> reused m_shpoCnsDaoMsg->OptionListReset( ); } } if ( !m_shpoCnsTopoNotifMsg->OptionListEmpty( ) ) { m_pMgmtClientLink->SendMessage( m_shpoCnsTopoNotifMsg ); // clear message -> reused m_shpoCnsTopoNotifMsg->OptionListReset( ); m_shpoCnsTopoNotifMsg->m_uSendMaxRetries = DEFAULT_SEND_MAX_RETRIES; } m_oConsolidatedMsgCheckTimer.SetTimer( m_stCfg.m_nConsolidatedMsgIntervalSec * 1000 ); } RplInstance_RunStep(&g_oRplInstance); m_oNetStat.Poll(); if (m_oTopologyCleanupTimer.GetElapsedSec() >= m_stCfg.m_nRplTopologyCleanupIntervalSec) { if ( m_pRplTopology->CleanupTopology ( &NotifyIsActiveInRplTopology ) ) m_pRplTopology->SaveNodesNo(); m_oTopologyCleanupTimer = CMicroSec(); } if ( m_oShortAddrMapCleanupTimer.GetElapsedSec ( ) >= m_stCfg.m_nShortAddrMapIntervalSec / 2 ) { m_oShortAddrMgr.Cleanup ( m_stCfg.m_nShortAddrMapIntervalSec ); m_oShortAddrMapCleanupTimer = CMicroSec ( ); } m_pRplTopology->UpdateIfDirty(UPDATE_EMERG_NONE); CheckSignals(); if (g_pApp->m_stCfg.m_nTopologyMgmtMsgsEnabled) { MgmtProtocol::CMgmtPMessage::Ptr pMsg = m_pMgmtClientLink->ReadMessage(); if (pMsg != NULL) { RplRootProcessor_AcceptMgmtMessage(pMsg); } } if ( oFarCfgIniTimer.IsSignaling( ) ) { oFarCfgIniTimer.SetTimer( FAR_CFG_INI_CHECK_MS ); int nNewFarCfgIniLastModification = GetLastModificationOfFile( FAR_CFG_INI ); if ( nNewFarCfgIniLastModification > nFarCfgIniLastModification ) { NLOG_INFO( "Reload "FAR_CFG_INI", new_modif=%d>last_modif=%d", nNewFarCfgIniLastModification, nFarCfgIniLastModification ); ReloadConfiguration( ); nFarCfgIniLastModification = nNewFarCfgIniLastModification; } } } }