summaryrefslogtreecommitdiffstats
path: root/src/Root.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Root.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/Root.cpp b/src/Root.cpp
index 3d3930975..8390cac7b 100644
--- a/src/Root.cpp
+++ b/src/Root.cpp
@@ -332,6 +332,26 @@ void cRoot::Start(std::unique_ptr<cSettingsRepositoryInterface> a_OverridesRepo)
void cRoot::StopServer()
{
+ // Kick all players from the server with custom disconnect message
+ class cPlayerCallback : public cPlayerListCallback
+ {
+ AString m_ShutdownMessage;
+ virtual bool Item(cPlayer * a_Player)
+ {
+ a_Player->GetClientHandlePtr()->Kick(m_ShutdownMessage);
+ m_HasSentDisconnect = true;
+ return false;
+ }
+ public:
+ bool m_HasSentDisconnect;
+ cPlayerCallback(AString a_ShutdownMessage) : m_ShutdownMessage(a_ShutdownMessage) { m_HasSentDisconnect = false; }
+ } PlayerCallback(m_Server->GetShutdownMessage());
+
+ cRoot::Get()->ForEachPlayer(PlayerCallback);
+ if (PlayerCallback.m_HasSentDisconnect)
+ {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ }
m_TerminateEventRaised = true;
m_StopEvent.Set();
m_InputThreadRunFlag.clear();