Shutdown connection when disconnect packet sent (#3999)
This commit is contained in:
parent
b12f4ef7d5
commit
c334824199
@ -2087,6 +2087,12 @@ void cClientHandle::Tick(float a_Dt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If player has been kicked, terminate the connection:
|
||||||
|
if (m_State == csKicked)
|
||||||
|
{
|
||||||
|
m_Link->Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
// If destruction is queued, destroy now:
|
// If destruction is queued, destroy now:
|
||||||
if (m_State == csQueuedForDestruction)
|
if (m_State == csQueuedForDestruction)
|
||||||
{
|
{
|
||||||
@ -2515,6 +2521,10 @@ void cClientHandle::SendDisconnect(const AString & a_Reason)
|
|||||||
LOGD("Sending a DC: \"%s\"", StripColorCodes(a_Reason).c_str());
|
LOGD("Sending a DC: \"%s\"", StripColorCodes(a_Reason).c_str());
|
||||||
m_Protocol->SendDisconnect(a_Reason);
|
m_Protocol->SendDisconnect(a_Reason);
|
||||||
m_HasSentDC = true;
|
m_HasSentDC = true;
|
||||||
|
// csKicked means m_Link will be shut down on the next tick. The
|
||||||
|
// disconnect packet data is sent in the tick thread so the connection
|
||||||
|
// is closed there after the data is sent.
|
||||||
|
m_State = csKicked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3389,7 +3399,3 @@ void cClientHandle::OnError(int a_ErrorCode, const AString & a_ErrorMsg)
|
|||||||
}
|
}
|
||||||
SocketClosed();
|
SocketClosed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -491,11 +491,10 @@ private:
|
|||||||
csDownloadingWorld, ///< The client is waiting for chunks, we're waiting for the loader to provide and send them
|
csDownloadingWorld, ///< The client is waiting for chunks, we're waiting for the loader to provide and send them
|
||||||
csConfirmingPos, ///< The client has been sent the position packet, waiting for them to repeat the position back
|
csConfirmingPos, ///< The client has been sent the position packet, waiting for them to repeat the position back
|
||||||
csPlaying, ///< Normal gameplay
|
csPlaying, ///< Normal gameplay
|
||||||
|
csKicked, ///< Disconnect packet sent, awaiting connection closure
|
||||||
csQueuedForDestruction, ///< The client will be destroyed in the next tick (flag set when socket closed)
|
csQueuedForDestruction, ///< The client will be destroyed in the next tick (flag set when socket closed)
|
||||||
csDestroying, ///< The client is being destroyed, don't queue any more packets / don't add to chunks
|
csDestroying, ///< The client is being destroyed, don't queue any more packets / don't add to chunks
|
||||||
csDestroyed, ///< The client has been destroyed, the destructor is to be called from the owner thread
|
csDestroyed, ///< The client has been destroyed, the destructor is to be called from the owner thread
|
||||||
|
|
||||||
// TODO: Add Kicking here as well
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
/* Mutex protecting m_State from concurrent writes. */
|
/* Mutex protecting m_State from concurrent writes. */
|
||||||
@ -595,8 +594,3 @@ private:
|
|||||||
virtual void OnRemoteClosed(void) override;
|
virtual void OnRemoteClosed(void) override;
|
||||||
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override;
|
virtual void OnError(int a_ErrorCode, const AString & a_ErrorMsg) override;
|
||||||
}; // tolua_export
|
}; // tolua_export
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user