From abcc14076cc0792644d7e3abf434421369f03a75 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sun, 28 Mar 2021 21:20:13 +0100 Subject: Call ProcessProtocolOut at opportune times --- src/ClientHandle.cpp | 11 ++++++++--- src/Entities/Player.cpp | 6 +++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp index 0b99cd95c..04436070c 100644 --- a/src/ClientHandle.cpp +++ b/src/ClientHandle.cpp @@ -130,8 +130,9 @@ void cClientHandle::Destroy(void) { cCSLock Lock(m_CSOutgoingData); - m_Link->Shutdown(); // Cleanly close the connection - m_Link.reset(); // Release the strong reference cTCPLink holds to ourself + m_Link->Send(m_OutgoingData.data(), m_OutgoingData.size()); // Flush remaining data. + m_Link->Shutdown(); // Cleanly close the connection. + m_Link.reset(); // Release the strong reference cTCPLink holds to ourself. } } @@ -1933,9 +1934,12 @@ void cClientHandle::RemoveFromWorld(void) m_SentChunks.clear(); } + // Flush outgoing data: + ProcessProtocolOut(); + // No need to send Unload Chunk packets, the client unloads automatically. - // Here, we set last streamed values to bogus ones so everything is resent + // Here, we set last streamed values to bogus ones so everything is resent: m_LastStreamedChunkX = 0x7fffffff; m_LastStreamedChunkZ = 0x7fffffff; } @@ -2105,6 +2109,7 @@ void cClientHandle::Tick(float a_Dt) void cClientHandle::ServerTick(float a_Dt) { ProcessProtocolIn(); + ProcessProtocolOut(); m_TicksSinceLastPacket += 1; if (m_TicksSinceLastPacket > 600) // 30 seconds diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index 7d8c3a191..59291e40d 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -3075,14 +3075,14 @@ void cPlayer::OnRemoveFromWorld(cWorld & a_World) AwardAchievement(Statistic::AchPortal); } + // Clientside warp start: + m_ClientHandle->SendRespawn(DestinationDimension, false); + // Clear sent chunk lists from the clienthandle: m_ClientHandle->RemoveFromWorld(); // The clienthandle caches the coords of the chunk we're standing at. Invalidate this. m_ClientHandle->InvalidateCachedSentChunk(); - - // Clientside warp start: - m_ClientHandle->SendRespawn(DestinationDimension, false); } -- cgit v1.2.3