From 7316dff51957f36933fd1c9531f2b0aaff16a5bb Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Fri, 25 Nov 2022 14:40:21 +0100 Subject: [PATCH] fix not removing client when disconnecting them --- include/TServer.h | 1 + src/Client.cpp | 1 + src/TServer.cpp | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/include/TServer.h b/include/TServer.h index fb0b069..e7a5c00 100644 --- a/include/TServer.h +++ b/include/TServer.h @@ -40,6 +40,7 @@ public: void InsertClient(const std::shared_ptr& Ptr); void RemoveClient(const std::weak_ptr&); + void RemoveClientById(int Id); // in Fn, return true to continue, return false to break [[deprecated("use ForEachClient instead")]] void ForEachClientWeak(const std::function)>& Fn); // in Fn, return Break or Continue diff --git a/src/Client.cpp b/src/Client.cpp index 7f7f008..197bf68 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -74,6 +74,7 @@ void TClient::Disconnect(std::string_view Reason) { if (ec) { beammp_debugf("Failed to close client socket: {}", ec.message()); } + mServer.RemoveClientById(GetID()); } void TClient::SetCarPosition(int Ident, const std::string& Data) { diff --git a/src/TServer.cpp b/src/TServer.cpp index 27e75ae..9ee382d 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -190,6 +190,15 @@ void TServer::RemoveClient(const std::weak_ptr& WeakClientPtr) { mClients.erase(WeakClientPtr.lock()); } +void TServer::RemoveClientById(int Id) { + auto Client = GetClient(*this, Id); + WriteLock Lock(mClientsMutex); + if (Client) { + Client->ClearCars(); + mClients.erase(Client); + } +} + void TServer::ForEachClientWeak(const std::function)>& Fn) { decltype(mClients) Clients; {