From af44154ff57ee725903d58c94cbba12413ddeb41 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sun, 11 Mar 2012 10:48:20 +0000 Subject: Not sending chunks to the client twice git-svn-id: http://mc-server.googlecode.com/svn/trunk@399 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ChunkSender.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source/ChunkSender.cpp') diff --git a/source/ChunkSender.cpp b/source/ChunkSender.cpp index ed650e1f8..cb4340f25 100644 --- a/source/ChunkSender.cpp +++ b/source/ChunkSender.cpp @@ -67,6 +67,8 @@ void cChunkSender::QueueSendChunkTo(int a_ChunkX, int a_ChunkY, int a_ChunkZ, cC ASSERT(a_Client != NULL); { cCSLock Lock(m_CS); + // It should not be already queued: + ASSERT(std::find(m_SendChunks.begin(), m_SendChunks.end(), sSendChunk(a_ChunkX, a_ChunkY, a_ChunkZ, a_Client)) == m_SendChunks.end()); m_SendChunks.push_back(sSendChunk(a_ChunkX, a_ChunkY, a_ChunkZ, a_Client)); } m_evtQueue.Set(); @@ -144,6 +146,15 @@ void cChunkSender::SendChunk(int a_ChunkX, int a_ChunkY, int a_ChunkZ, cClientHa { ASSERT(m_World != NULL); + // Ask the client if it still wants the chunk: + if (a_Client != NULL) + { + if (!a_Client->WantsSendChunk(a_ChunkX, a_ChunkY, a_ChunkZ)) + { + return; + } + } + // Prepare MapChunk packets: if( !m_World->GetChunkData(a_ChunkX, a_ChunkY, a_ChunkZ, *this) ) { -- cgit v1.2.3