From b075eb7c98e45972b2ff79048cfde8f1469b00c7 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 22 Jun 2025 16:14:17 +0800 Subject: fix(server/clients): async initialization API: newClient no longer take any args API: manual isValid() check is needed to interact with client now --- include/libsock/server/client.hpp | 1 + include/libsock/server/clients.hpp | 2 +- src/server/client.cpp | 2 ++ src/server/clients.cpp | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/libsock/server/client.hpp b/include/libsock/server/client.hpp index 591bc2a..1d07837 100644 --- a/include/libsock/server/client.hpp +++ b/include/libsock/server/client.hpp @@ -48,6 +48,7 @@ class Client { bool isValid(); private: + void init(); Client(SP server, SP clients, bool track = false, bool oneShot = true); WP m_self; diff --git a/include/libsock/server/clients.hpp b/include/libsock/server/clients.hpp index b18c043..dac5dd1 100644 --- a/include/libsock/server/clients.hpp +++ b/include/libsock/server/clients.hpp @@ -24,7 +24,7 @@ class Clients : public std::enable_shared_from_this { static SP create(WP server); ~Clients(); - SP newClient(std::function &)> loopFunc = [](const WP &) { ; }); + SP newClient(); void broadcast(const std::string &msg, std::optional> self = std::nullopt); // second param only specified when we // want to exclude the sender diff --git a/src/server/client.cpp b/src/server/client.cpp index e84a654..aa2cdd1 100644 --- a/src/server/client.cpp +++ b/src/server/client.cpp @@ -23,7 +23,9 @@ Client::Client(SP server, SP clients, bool track, bool oneShot) throw std::runtime_error("server:client: ClientManager doesn't exist"); if (m_wpServer.expired()) throw std::runtime_error("server:client: Server doesn't exist"); +} +void Client::init() { m_sockfd = std::make_shared(accept(m_wpServer.lock()->getSocket()->get(), reinterpret_cast(&m_addr), &m_addrLen)); // if this is in the init list, it will run before // m_addrLen, so it won't work :/ diff --git a/src/server/clients.cpp b/src/server/clients.cpp index a274224..710f813 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -58,9 +58,9 @@ 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 &)> loopFunc) { +SP Clients::newClient() { SP client = SP(new Client(m_wpServer.lock(), shared_from_this())); - auto &instance = m_vClients.emplace_back(std::jthread([&client, &loopFunc]() { loopFunc(client); }), client); + auto &instance = m_vClients.emplace_back(std::jthread([&client]() { client->init(); }), client); instance.second->m_self = std::weak_ptr(instance.second); return client; } -- cgit v1.2.3