void Message::prepare() { if( !packet ) createPacket(); size_t totalSize = (size_t) ms->position; size_t bufSize = GetCompressionBufferSize(totalSize); enet_packet_resize(packet, bufSize); MemoryStream pms; StreamMemoryInit(&pms); StreamMemorySetRawBuffer(&pms, packet->data); EncodeVariableInteger(&pms, id); StreamWrite(&pms, &flags, sizeof(flags)); if( GetBitFlag(flags, MessageFlags::Compressed) ) { uint8* in = &ms->data[0]; uint8* out = pms.buffer + pms.position; int32 length = fastlz_compress_level(1, in, totalSize, out); pms.position += length; } else { enet_packet_resize(packet, totalSize + pms.position); StreamWrite(&pms, &ms->data[0], totalSize); } packet->dataLength = (size_t) pms.position; }
void Packet::prepare() { if( !packet ) createPacket(); size_t totalSize = (size_t) ms.getPosition(); size_t bufSize = GetCompressionBufferSize(totalSize); enet_packet_resize(packet, bufSize); MemoryStream pms; pms.setRawBuffer(packet->data); EncodeVariableInteger(&pms, id); pms.write((uint8*) &flags, sizeof(flags)); if( GetBitFlag(flags, PacketFlags::Compressed) ) { uint8* in = ms.data.Buffer(); uint8* out = pms.buffer + pms.position; int32 length = fastlz_compress_level(1, in, totalSize, out); pms.position += length; } else { enet_packet_resize(packet, totalSize + pms.position); pms.write(ms.data.Buffer(), totalSize); } packet->dataLength = (size_t) pms.position; }
void Message::setPacket(ENetPacket* packet) { MemoryStream pms; StreamMemoryInit(&pms); StreamMemorySetRawBuffer(&pms, packet->data); uint64 id; if( !DecodeVariableInteger(&pms, id) ) return; this->id = (MessageId) id; this->packet = packet; StreamReadBuffer(&pms, &flags, sizeof(MessageFlags::Enum)); uint8* in = packet->data + pms.position; size_t inSize = packet->dataLength - (size_t) pms.position; if( GetBitFlag(flags, MessageFlags::Compressed) ) { size_t bufSize = GetCompressionBufferSize(packet->dataLength); StreamResize(ms, bufSize); int32 length = fastlz_decompress(in, inSize, &ms->data[0], ms->data.size()); StreamResize(ms, length); } else { StreamResize(ms, inSize); StreamWrite(ms, in, inSize); } freePacket = true; }
void Packet::setPacket(ENetPacket* packet) { MemoryStream pms; pms.setRawBuffer(packet->data); uint64 id; if( !DecodeVariableInteger(&pms, id) ) return; this->id = (PacketId) id; this->packet = packet; pms.readBuffer(&flags, sizeof(PacketFlags)); uint8* in = packet->data + pms.position; size_t inSize = packet->dataLength - (size_t) pms.position; if( GetBitFlag(flags, PacketFlags::Compressed) ) { size_t bufSize = GetCompressionBufferSize(packet->dataLength); ms.resize(bufSize); int32 length = fastlz_decompress(in, inSize, ms.data.Buffer(), ms.data.Size()); ms.resize(length); } else { ms.resize(inSize); ms.write(in, inSize); } freePacket = true; }