From 65672b471cdcd43daff8fcbbc6ff5d0d54159785 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 22 Jun 2025 17:21:46 +0800 Subject: API(server/client:newClient): optional cb function onConnect --- include/libsock/server/clients.hpp | 2 +- src/server/clients.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/libsock/server/clients.hpp b/include/libsock/server/clients.hpp index dac5dd1..cb11e74 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(); + SP newClient(std::function &)> cb = [](SP) {}); 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/clients.cpp b/src/server/clients.cpp index 710f813..58f7bca 100644 --- a/src/server/clients.cpp +++ b/src/server/clients.cpp @@ -1,6 +1,7 @@ #include "libsock/server/clients.hpp" #include "libsock/server/client.hpp" #include +#include #include #include #include @@ -58,9 +59,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() { +SP Clients::newClient(std::function &)> cb) { SP client = SP(new Client(m_wpServer.lock(), shared_from_this())); - auto &instance = m_vClients.emplace_back(std::jthread([&client]() { client->init(); }), client); + 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