/** \brief Called from ACEReactor when there are events in our queue() */ int AuthLink::handle_output( ACE_HANDLE /*= ACE_INVALID_HANDLE*/ ) { SEGSEvent *ev; ACE_Time_Value nowait (ACE_OS::gettimeofday ()); while (-1 != getq(ev, &nowait)) { if(ev->type()==SEGS_EventTypes::evFinish) { ACE_DEBUG ((LM_DEBUG,ACE_TEXT ("(%P|%t) Error sent, closing connection\n"))); return -1; } if(ev->type()==evContinue) // we have asked ourselves to send leftovers { assert(m_unsent_bytes_storage.GetReadableDataSize() > 0); // be sure we have some } else { size_t start_offset=m_unsent_bytes_storage.GetReadableDataSize(); encode_buffer(static_cast<AuthLinkEvent *>(ev),start_offset); } if(!send_buffer()) // trying to send the contents of the buffer { ev->release(); // we have failed somehow break; } ev->release(); } if (msg_queue()->is_empty ()) // we don't want to be woken up reactor()->cancel_wakeup(this, ACE_Event_Handler::WRITE_MASK); else // unless there is something to send still reactor()->schedule_wakeup(this, ACE_Event_Handler::WRITE_MASK); return 0; }
int EventProcessor::svc( void ) { SEGSEvent *mb; while(getq(mb,0)!=-1) { if(mb->type()==0) { mb->release(); return 0; } dispatch(mb); mb->release(); } return 0; }