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