bool UDPCarrier::OnEvent(struct epoll_event &event) { //1. Read data if ((event.events & EPOLLIN) != 0) { IOBuffer *pInputBuffer = _pProtocol->GetInputBuffer(); o_assert(pInputBuffer != NULL); if (!pInputBuffer->ReadFromUDPFd(_inboundFd, _ioAmount, _peerAddress)) { FATAL("Unable to read data"); return false; } if (_ioAmount == 0) { FATAL("Connection closed"); return false; } _rx += _ioAmount; ADD_IN_BYTES_MANAGED(_type, _ioAmount); if (!_pProtocol->SignalInputData(_ioAmount, &_peerAddress)) { FATAL("Unable to signal data available"); return false; } } //2. Write data if ((event.events & EPOLLOUT) != 0) { NYIR; } return true; }
bool UDPCarrier::OnEvent(select_event &event) { //3. Do the I/O switch (event.type) { case SET_READ: { IOBuffer *pInputBuffer = _pProtocol->GetInputBuffer(); o_assert(pInputBuffer != NULL); if (!pInputBuffer->ReadFromUDPFd(_inboundFd, _ioAmount, _peerAddress)) { FATAL("Unable to read data"); return false; } _rx += _ioAmount; ADD_IN_BYTES_MANAGED(_type, _ioAmount); return _pProtocol->SignalInputData(_ioAmount, &_peerAddress); } case SET_WRITE: { _pProtocol->ReadyForSend(); return true; } default: { ASSERT("Invalid state: %hhu", event.type); return false; } } }
bool UDPCarrier::OnEvent(struct kevent &event) { int32_t recvAmount = 0; //3. Do the I/O switch (event.filter) { case EVFILT_READ: { IOBuffer *pInputBuffer = _pProtocol->GetInputBuffer(); assert(pInputBuffer != NULL); if (!pInputBuffer->ReadFromUDPFd(event.ident, recvAmount, _peerAddress)) { FATAL("Unable to read data"); return false; } _rx += recvAmount; return _pProtocol->SignalInputData(recvAmount, &_peerAddress); } case EVFILT_WRITE: { NYIR; } default: { ASSERT("Invalid state: %hu", event.filter); return false; } } }
bool UDPCarrier::OnEvent(struct epoll_event &event) { //1. Read data if ((event.events & EPOLLIN) != 0) { IOBuffer *pInputBuffer = _pProtocol->GetInputBuffer(); assert(pInputBuffer != NULL); int32_t recvBytes = 0; if (!pInputBuffer->ReadFromUDPFd(_inboundFd, recvBytes, _peerAddress)) { FATAL("Unable to read data"); return false; } if (recvBytes == 0) { FATAL("Connection closed"); return false; } _rx += recvBytes; if (!_pProtocol->SignalInputData(recvBytes, &_peerAddress)) { FATAL("Unable to signal data available"); return false; } } //2. Write data if ((event.events & EPOLLOUT) != 0) { NYIR; } return true; }