Use list instead of vector for clients
This commit is contained in:
parent
5abdafc614
commit
c2b100428d
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Network::TCPClient> m_clients;
|
||||
LockableList<Network::TCPClient> m_clients;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
|
||||
namespace Feather
|
||||
{
|
||||
|
@ -18,4 +19,7 @@ namespace Feather
|
|||
|
||||
template <typename T>
|
||||
using LockableVector = Lockable<std::vector<T>>;
|
||||
|
||||
template <typename T>
|
||||
using LockableList = Lockable<std::list<T>>;
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -24,6 +24,10 @@ namespace Feather::Network
|
|||
private:
|
||||
std::unique_ptr<TCPListenerClient> 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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue