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;
    }
}
Example #4
0
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);
        }
    }
}
Example #5
0
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;
			}
		}

	}
}