From 4d65ffffc0b6f35ac84e310fd4bc9739ea7e0c0a Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Mon, 5 Mar 2012 16:41:57 +0000 Subject: ChunkSender: Chunks are now compressed and sent to clients from a separate threads, proper passive waiting between threads. Not much tested, just appears to work :) git-svn-id: http://mc-server.googlecode.com/svn/trunk@365 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ChunkSender.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 source/ChunkSender.h (limited to 'source/ChunkSender.h') diff --git a/source/ChunkSender.h b/source/ChunkSender.h new file mode 100644 index 000000000..a56e797da --- /dev/null +++ b/source/ChunkSender.h @@ -0,0 +1,63 @@ + +// ChunkSender.h + +// Interfaces to the cChunkSender class representing the thread that waits for chunks becoming ready (loaded / generated) and sends them to clients + + + + + +#pragma once + +#include "cIsThread.h" +#include "cChunk.h" +#include "packets/cPacket.h" + + + + + +class cWorld; + + + + + +class cChunkSender: + public cIsThread, + public cChunkDataCallback +{ + typedef cIsThread super; +public: + cChunkSender(void); + ~cChunkSender(); + + bool Start(cWorld * a_World); + + void ChunkReady(int a_ChunkX, int a_ChunkY, int a_ChunkZ); + +protected: + + cWorld * m_World; + + cCriticalSection m_CS; + cChunkCoordsList m_ChunksReady; + cEvent m_Event; // Set when anything is added to m_ChunksReady + + // Data about the chunk that is being sent: + char m_BlockData[cChunk::c_BlockDataSize]; + PacketList m_Packets; // Accumulator for the entity-packets to send + + // cIsThread override: + virtual void Execute(void) override; + + // cChunkDataCallback overrides: + virtual void BlockData(const char * a_Data) override; + virtual void Entity(cEntity * a_Entity) override; + virtual void BlockEntity(cBlockEntity * a_Entity) override; + +} ; + + + + -- cgit v1.2.3