From c76c01d1fd2ccbf91a6c3e0a120ed68c37ff106b Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 22 Jun 2025 17:38:23 +0800 Subject: API(server/clients:newClient): allow setting independent clients to wait fix!(server/clients:newClient): pass m_track also --- include/libsock/server/client.hpp | 4 ++-- include/libsock/server/clients.hpp | 8 +++----- src/server/client.cpp | 4 ++-- src/server/clients.cpp | 13 ++++++------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/include/libsock/server/client.hpp b/include/libsock/server/client.hpp index 1d07837..0c3f869 100644 --- a/include/libsock/server/client.hpp +++ b/include/libsock/server/client.hpp @@ -49,7 +49,7 @@ class Client { private: void init(); - Client(SP server, SP clients, bool track = false, bool oneShot = true); + Client(SP server, SP clients, bool track = false, bool wait = false); WP m_self; WP m_wpServer; @@ -61,7 +61,7 @@ class Client { std::string m_ip; int m_port; bool m_track; - bool m_oneShot; + bool m_wait; std::optional m_szReading = std::nullopt; diff --git a/include/libsock/server/clients.hpp b/include/libsock/server/clients.hpp index dbe7099..4b67c23 100644 --- a/include/libsock/server/clients.hpp +++ b/include/libsock/server/clients.hpp @@ -21,10 +21,10 @@ struct SData { class Clients : public std::enable_shared_from_this { public: - static SP create(WP server, bool wait = false); + static SP create(WP server); ~Clients(); - SP newClient(std::function &)> cb = [](SP) {}); + SP newClient(std::function &)> cb = [](SP) {}, bool track = true, bool wait = false); void broadcast(const std::string &msg, std::optional> self = std::nullopt); // second param only specified when we // want to exclude the sender @@ -38,13 +38,11 @@ class Clients : public std::enable_shared_from_this { std::vector getDatas() const; private: - Clients(bool wait = false); - + Clients(); void broadcast(const SData &msg); std::vector>> m_vClients; std::vector m_vDatas; - bool m_wait; WP get(); diff --git a/src/server/client.cpp b/src/server/client.cpp index cfd06ee..e35d8cc 100644 --- a/src/server/client.cpp +++ b/src/server/client.cpp @@ -13,9 +13,9 @@ using namespace LibSock::Server; -Client::Client(SP server, SP clients, bool track, bool oneShot) +Client::Client(SP server, SP clients, bool track, bool wait) : m_track(track) - , m_oneShot(oneShot) { + , m_wait(wait) { m_wpServer = std::move(server); m_wpClients = std::move(clients); diff --git a/src/server/clients.cpp b/src/server/clients.cpp index 10d0d88..5337769 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -27,8 +27,7 @@ void Clients::shutdownClients(std::optional Clients::create(WP server, bool wait) { - auto c = SP(new Clients(wait)); +SP Clients::create(WP server) { + auto c = SP(new Clients()); vpClients.emplace_back(c); c->m_self = c; c->m_wpServer = server; @@ -54,14 +53,14 @@ WP Clients::get() { Clients::~Clients() { for (auto &[thread, client] : m_vClients) { if (thread.joinable()) - m_wait ? thread.join() : thread.detach(); + client->m_wait ? thread.join() : thread.detach(); kick(WP(client)); } vpClients.erase(std::remove_if(vpClients.begin(), vpClients.end(), [this](const WP &wptr) { return !wptr.owner_before(m_self) && !m_self.owner_before(wptr); }), vpClients.end()); } -SP Clients::newClient(std::function &)> cb) { - SP client = SP(new Client(m_wpServer.lock(), shared_from_this())); +SP Clients::newClient(std::function &)> cb, bool track, bool wait) { + SP client = SP(new Client(m_wpServer.lock(), shared_from_this(), track, wait)); auto &instance = m_vClients.emplace_back(std::jthread([&client, &cb]() { client->init(); cb(client); }), client); instance.second->m_self = std::weak_ptr(instance.second); return client; -- cgit v1.2.3