Ejemplo n.º 1
0
bool LinkageWorker::Run()
{
    if (!OnInitialize()) {
        return false;
    }

    HealthTimer *health = new HealthTimer(this);
    if (!RegisterTimer(1000000000LL, health, true)) {
        delete health;
        return false;
    }

    bool result = true;
    while (!_quit) {
        if (!ev_run(_loop, 0)) {
            CLOG.Error("Linkage: ev_run() returned false.");
            result = false;
            break;
        }
    }

    OnShutdown();

    for (events_t::iterator p = _events.begin(); p != _events.end(); ++p) {
        DoRelease(p->second, false);
    }

    for (timers_t::iterator p = _timers.begin(); p != _timers.end(); ++p) {
        DoRelease(*p, false);
    }

    _events.clear();
    _timers.clear();
    return result;
}
Ejemplo n.º 2
0
void ProactorService::open( ACE_HANDLE h, ACE_Message_Block& MessageBlock )
{
	this->handle(h);	

	if (this->m_AsyncReader.open(*this) != 0 || this->m_AsyncWriter.open(*this) != 0)
	{
		delete this;
		return;
	}
	
	m_pTimerLock = new InterlockedValue();
	m_pTimerLock->Release();

	m_bServiceCloseFlag = false;

	m_Serial = ProactorServiceMapSingleton::instance()->Register(this);

	assert(m_Serial != INVALID_ID);

	RegisterTimer();

	ISession::OnConnect(this->m_Serial);

	PostRecv();
}
Ejemplo n.º 3
0
void ProactorService::open( ACE_HANDLE h, ACE_Message_Block& MessageBlock )
{
	this->handle(h);	

	if (this->m_AsyncReader.open(*this) != 0 || this->m_AsyncWriter.open(*this) != 0)
	{
		delete this;
		return;
	}
	
	m_pTimerLock = new InterlockedValue();
	m_pTimerLock->Release();

	m_bServiceCloseFlag = false;

	if (g_currentSessionCnt > GetEngine()->GetMaxUserAccept())
	{
		if (this->handle() != ACE_INVALID_HANDLE)
			ACE_OS::closesocket(this->handle());

		this->handle(ACE_INVALID_HANDLE);

		delete this;
		return;
	}

	m_serial = ProactorServiceManagerSinglton::instance()->Register(this);	

	if (m_serial == INVALID_ID)
	{
		if (this->handle() != ACE_INVALID_HANDLE)
			ACE_OS::closesocket(this->handle());

		this->handle(ACE_INVALID_HANDLE);
		
		delete this;
		return;
	}

	RegisterTimer();

	sockaddr_in addr;
	int addrLen = sizeof(addr);

	ACE_OS::getpeername(this->handle(), (sockaddr *)&addr, &addrLen);	

	m_sessionDesc.port = ntohs(addr.sin_port);
	char* szIP = inet_ntoa(addr.sin_addr);

	if(szIP != NULL)
		m_sessionDesc.szIP = inet_ntoa(addr.sin_addr);


	ISession::OnConnect(this->m_serial, m_sessionDesc);

	PostRecv();
}
Ejemplo n.º 4
0
/*****************************************************************
* init timer1
* Init timer hardware if needed here
******************************************************************/
void InitTimers(void)
{
	//SETUP ANY HARDWARE AS NEEDED

	//CHECKOUT THE TIMERS THAT WILL BE USED IN THE SYSTEM
	timer_pb = RegisterTimer();	//register the timer

	//START THE TIMERS IF THEY ARE FREE RUNNING
	TimerStart(timer_pb, TIME_PB0);	//restart the time

}
 virtual void Serialize(SActivationInfo *pActInfo, TSerialize ser)
 {
     if (ser.IsReading())
     {
         ResetTimer();
         // re-enable if it's enabled
         const bool bEnabled = GetPortBool(pActInfo, EIP_Enabled);
         if (bEnabled)
             RegisterTimer(pActInfo);
     }
 }
Ejemplo n.º 6
0
/**********************************************************************
* TimerTest
* Description: Basic test of timer functionality
* Notes:  Uses 1 timer slot - cannot be unregistered,  only use for
* 	testing and debugging.
***********************************************************************/
void TimerTest( void)
{
	uint8_t t1 = 0;

	t1 = RegisterTimer();	//register the timer
	TimerStart(t1, 1000L);   //starts t1, 1 second interval
	LED0_ON;					//turn on the LED
	while(TimerIsOn(t1));	//wait until timer has finished


	//SAME THING FOR LED OFF
	TimerStart(t1, 1000L);   //starts t1, 1 second interval
	LED0_OFF;
	while(TimerIsOn(t1));

}
 virtual void ProcessEvent( EFlowEvent event, SActivationInfo *pActInfo )
 {
     switch (event)
     {
     case eFE_Initialize:
     case eFE_Activate:
     {
         ResetTimer();
         m_actInfo = *pActInfo;
         const bool bEnabled = IsBoolPortActive(pActInfo, EIP_Enabled);
         if (bEnabled)
             RegisterTimer(pActInfo);
     }
     break;
     }
 }
Ejemplo n.º 8
0
void ProactorService::open( ACE_HANDLE h, ACE_Message_Block& MessageBlock )
{
	this->handle(h);	

	if (this->m_AsyncReader.open(*this) != 0 || this->m_AsyncWriter.open(*this) != 0)
	{
		delete this;
		return;
	}
	
	m_pTimerLock = new InterlockedValue();
	m_pTimerLock->Release();

	m_bServiceCloseFlag = false;

	if (g_currentSessionCnt > GetEngine()->GetMaxUserAccept())
	{
		if (this->handle() != ACE_INVALID_HANDLE)
			ACE_OS::closesocket(this->handle());

		this->handle(ACE_INVALID_HANDLE);

		delete this;
		return;
	}

	m_serial = ProactorServiceManagerSinglton::instance()->Register(this);	

	if (m_serial == INVALID_ID)
	{
		if (this->handle() != ACE_INVALID_HANDLE)
			ACE_OS::closesocket(this->handle());

		this->handle(ACE_INVALID_HANDLE);
		
		delete this;
		return;
	}

	RegisterTimer();

	ISession::OnConnect(this->m_serial, m_sessionDesc);

	PostRecv();
}
Ejemplo n.º 9
0
bool LinkageWorker::Run()
{
    if (!OnInitialize()) {
        return false;
    }

    HealthTimer *health = new HealthTimer(this);
    if (!RegisterTimer(1000000000LL, health, true)) {
        delete health;
        return false;
    }

    _running_thread_id = get_current_thread_id();
    LOG(VERBOSE) << "Linkage: enter event loop [" << _running_thread_id << "]";
    bool result = true;
    while (!_quit) {
        if (!ev_run(_loop, 0)) {
            CLOG.Error("Linkage: ev_run() returned false.");
            result = false;
            break;
        }
    }
    LOG(VERBOSE) << "Linkage: leave event loop [" << _running_thread_id << "]";
    _running_thread_id = 0;

    OnShutdown();

    for (events_t::iterator p = _events.begin(); p != _events.end(); ++p) {
        DoRelease(p->second, false);
    }

    for (timers_t::iterator p = _timers.begin(); p != _timers.end(); ++p) {
        DoRelease(*p, false);
    }

    _events.clear();
    _timers.clear();
    return result;
}
VOID C3DCoordinateAxisMain::Init(VOID)
{


    RegisterTimer();
}