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 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; }
static bool WebStreamOpen(Stream* s) { WebStream* ws = (WebStream*) s; if( !ws ) return false; InitCURL(); ws->handle = curl_easy_init(); if( !ws->handle ) { LogError("Could not initialize cURL"); return false; } ws->downloaded = false; curl_easy_setopt(ws->handle, CURLOPT_FOLLOWLOCATION, true); curl_easy_setopt(ws->handle, CURLOPT_URL, ws->path.c_str()); curl_easy_setopt(ws->handle, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(ws->handle, CURLOPT_PROGRESSFUNCTION, &HandleProgress); StreamMemoryInit(&ws->ms); return true; }
MemoryStream* StreamCreateFromMemory(Allocator* alloc, uint64 size) { MemoryStream* ms = Allocate(alloc, MemoryStream); if( !ms ) return nullptr; StreamMemoryInit(ms); if( !MemoryOpen(ms) ) { Deallocate(ms); return nullptr; } MemoryResize(ms, size); return ms; }