From 89a41052c9195c684e1eb035b4a556f986c321f3 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 22 Jun 2025 17:59:08 +0800 Subject: API!(server/clients:newClient): now returns a future --- src/server/clients.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/server/clients.cpp') diff --git a/src/server/clients.cpp b/src/server/clients.cpp index 5337769..8bb85a3 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -2,6 +2,7 @@ #include "libsock/server/client.hpp" #include #include +#include #include #include #include @@ -59,11 +60,17 @@ Clients::~Clients() { 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, bool track, bool wait) { +std::future> Clients::newClient(std::function &)> cb, bool track, bool wait) { + auto promise = std::make_shared>>(); 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); + auto &instance = m_vClients.emplace_back(std::jthread([client, cb, promise]() mutable { + client->init(); + promise->set_value(client); + cb(client); + }), + client); instance.second->m_self = std::weak_ptr(instance.second); - return client; + return promise->get_future(); } void Clients::broadcast(const std::string &msg, std::optional> self) { -- cgit v1.2.3