Exemple #1
0
void CNet::CSend(const s32 nConnectID, const void * pData, const s32 nSize) {
    CConnection * pCConnection = m_ConnectPool[nConnectID];
    if (pCConnection->bShutdown) {
        return;
    }
    s32 size = pCConnection->stream.size();
    pCConnection->stream.in(pData, nSize);
    if (0 == size) {
        struct iocp_event * pEvent = malloc_event();
        ASSERT(pEvent);
        pEvent->event = EVENT_ASYNC_SEND;
        pEvent->wbuf.buf = (char *) pCConnection->stream.buff();
        pEvent->wbuf.len = nSize;
        pEvent->p = pCConnection;
        pEvent->s = pCConnection->s;
        s32 err;
        {
            CAutoLock(&(pCConnection->sdlock));
            pCConnection->nSDTags = pCConnection->nSDTags & CSD_RECV;
        }
        if (ERROR_NO_ERROR != async_send(pEvent, &err, pCConnection)) {
            //some problem in here must be killed// like 10054
            NET_DEBUG("async_send failed, err %d", err);
            SafeShutdwon(pEvent, CSD_SEND);
        }
    }

}
Exemple #2
0
Packet *Packet::createPacket(const UDPPacket& data)
{
	Packet *packet = globalPacketFactory.createFromTypeId(PacketFactory::PacketTypes(data.packet->data[0]));

	// Check that the data received it big enough to deserialize
	if (data->len < packet->getPacketSize())
	{
		NET_DEBUG("Received packet too big! Size: " << data->len << " Expected: " << packet->getPacketSize());
		delete packet;
		return 0;
	}
	else
	{
		packet->deserialize(data->data);
		return packet;
	}
}