Ejemplo n.º 1
0
    void Udp::OnSend(/* [in] */ uv_udp_send_t *req,
                     /* [in] */ int status)
    {
        Udp *self = (Udp *) req->data;
        Buffer *sendBuffer = self->m_pSendBuffer;
        self->m_pSendBuffer = NULL;

        if(self->m_pSendHandler) {
            SendHandler *sendHandler = self->m_pSendHandler;
            self->m_pSendHandler = NULL;

            sendHandler->OnSend(self, status);
        }

        sendBuffer->Unlock();
        sendBuffer->Unref();

        if(status) {
            self->Close();
        }

        self->Unref();
    }
Ejemplo n.º 2
0
    void Udp::OnRecv(/* [in] */ uv_udp_t *peer,
                     /* [in] */ ssize_t nread, 
                     /* [in] */ const uv_buf_t *buf,
                     /* [in] */ const sockaddr *addr,
                     /* [in] */ unsigned flags)
    {
        if(! nread) {
            Buffer::Free(buf->base);
            return;
        }

        Udp *self = (Udp *) peer->data;
        Buffer *buffer = NULL;
        if(0 < nread) {
            buffer = new Buffer(buf, nread);
        }

        Address address;
        if(addr) {
            address.Set(addr);
        }

        self->m_pRecvHandler->OnRecv(self,
                                     buffer,
                                     address,
                                     flags,
                                     0 > nread ? nread : 0);

        if(buffer) {
            buffer->Unref();
        }

        if(0 > nread) {
            self->Close();
        }
    }