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; }
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(); } }