From c2b100428dd65c5a5da8e22fa1da9d4867f8c27d Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Wed, 29 Jul 2020 15:34:10 +0100 Subject: [PATCH] Use list instead of vector for clients --- src/DedicatedServer.cpp | 4 ++-- src/DedicatedServer.h | 4 ++-- src/Lockable.h | 4 ++++ src/network/IListenerInterface.h | 2 +- src/network/TCPListener.h | 4 ++++ 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/DedicatedServer.cpp b/src/DedicatedServer.cpp index c82ea5f..22fbc27 100644 --- a/src/DedicatedServer.cpp +++ b/src/DedicatedServer.cpp @@ -27,9 +27,9 @@ namespace Feather clients.emplace_back(std::move(client)); } - void DedicatedServer::OnClientDisconnect(Network::TCPClient& client) + void DedicatedServer::OnClientDisconnect(const Network::TCPClient& client) { auto [clients, lock] = m_clients.borrow(); - //clients.erase(std::remove(clients.begin(), clients.end(), client), clients.end()); + clients.remove(client); } } diff --git a/src/DedicatedServer.h b/src/DedicatedServer.h index 173411e..cde7c1b 100644 --- a/src/DedicatedServer.h +++ b/src/DedicatedServer.h @@ -15,13 +15,13 @@ namespace Feather ~DedicatedServer(); void OnClientConnect(Network::TCPClient&& client) override; - void OnClientDisconnect(Network::TCPClient& client) override; + void OnClientDisconnect(const Network::TCPClient& client) override; private: ServerProperties* m_properties; Network::TCPListener m_listener; Network::ServerStatus m_status; - LockableVector m_clients; + LockableList m_clients; }; } diff --git a/src/Lockable.h b/src/Lockable.h index 0cc45ae..5a6b87a 100644 --- a/src/Lockable.h +++ b/src/Lockable.h @@ -2,6 +2,7 @@ #include #include +#include namespace Feather { @@ -18,4 +19,7 @@ namespace Feather template using LockableVector = Lockable>; + + template + using LockableList = Lockable>; } \ No newline at end of file diff --git a/src/network/IListenerInterface.h b/src/network/IListenerInterface.h index 6c18607..6dd56d5 100644 --- a/src/network/IListenerInterface.h +++ b/src/network/IListenerInterface.h @@ -10,6 +10,6 @@ namespace Feather::Network { public: virtual void OnClientConnect(TCPClient&& client) = 0; - virtual void OnClientDisconnect(TCPClient& client) = 0; + virtual void OnClientDisconnect(const TCPClient& client) = 0; }; } \ No newline at end of file diff --git a/src/network/TCPListener.h b/src/network/TCPListener.h index 826237d..7c1085d 100644 --- a/src/network/TCPListener.h +++ b/src/network/TCPListener.h @@ -24,6 +24,10 @@ namespace Feather::Network private: std::unique_ptr m_client; }; + // TODO: Can we eliminate the move constructor + overloads? + // Kinda unclean. + inline bool operator==(const TCPClient& a, const TCPClient& b) { return &a == &b; } + inline bool operator!=(const TCPClient& a, const TCPClient& b) { return &a != &b; } class TCPListener {