Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}