コード例 #1
0
ファイル: reactor.cpp プロジェクト: QEver/vosproj
int boss::Reactor::DoHandleReadyEvents(list<int> &listReadyFDs)
{
	for(list<int>::iterator i = listReadyFDs.begin(); i != listReadyFDs.end(); i++)
	{
	    int iHandler = *i;


        EventHandler *pEventHandler = m_mEventHandlers[iHandler];
			
        if(pEventHandler &&
			           (MASK_ACCEPT == m_mMasks[iHandler] || MASK_INPUT == m_mMasks[iHandler])
				                                               )
        {
            int iRst = 0;
            if(MASK_ACCEPT == m_mMasks[iHandler])
            {
                if((0 == m_uiMaxHandlersNum) || (m_setHandlers.size() < m_uiMaxHandlersNum))
                          iRst = pEventHandler->HandleInput(iHandler);
            }
			else
			{
				iRst = pEventHandler->HandleInput(iHandler);
			}

			if(0 != iRst)
			{
				UnRegisterHandler(pEventHandler);
						
			    pEventHandler->HandleClose();
   			}
        }
		else
		{
		    UnRegisterHandler(pEventHandler);
		}
	}

	return 0;
}
コード例 #2
0
ファイル: eventmanager.cpp プロジェクト: tuita/DOMQ
void __EventCallBack(int/* fd*/, short events, void *arg)
{
	EventHandler* handler = static_cast<EventHandler*>(arg);
	assert(handler);

	if (events & EV_TIMEOUT) 
    {
		handler->HandleTimeout(NULL);
	}
	else if (events & EV_READ) 
    {
		handler->HandleInput();
	}
	else if (events & EV_WRITE) 
    {
		handler->HandleOutput();
	}
}