From 0804c1285fe16977bce9f69c426a59994bebf594 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 18 Jun 2025 09:07:50 +0800 Subject: feat: shutdownClients accepts an optional cb func now fix: disallow creation of multiple clientManager --- src/server/clients.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/clients.cpp b/src/server/clients.cpp index 210581a..d3a9908 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -3,22 +3,18 @@ #include #include #include +#include #include #include using namespace LibSock::Server; -void Clients::shutdownClients() { +void Clients::shutdownClients(std::optional>> &)>> cb) { if (m_vClients.empty()) return; - for (auto &[thread, client] : m_vClients) { - if (client) { - client->write("Server shutting down"); - if (!client->getName().empty()) - broadcast(std::format("{} has left the chat", client->getName()), WP(client)); - } - } + if (cb) + (*cb)(m_vClients); for (auto &[thread, client] : m_vClients) { if (thread.joinable()) @@ -34,6 +30,9 @@ Clients::Clients() { // shutdownClients(); // })) // void(); // failed to register exit handler... + if (pClients) + throw std::runtime_error("server:client: ClientManager already exist"); + pClients = SP(this); }; -- cgit v1.2.3