summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libsock/server/clients.hpp2
-rw-r--r--src/server/clients.cpp5
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<Clients> {
static SP<Clients> create(WP<Server> server);
~Clients();
- SP<Client> newClient();
+ SP<Client> newClient(std::function<void(SP<Client> &)> cb = [](SP<Client>) {});
void broadcast(const std::string &msg, std::optional<WP<Client>> 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 <algorithm>
+#include <functional>
#include <ranges>
#include <unistd.h>
#include <utility>
@@ -58,9 +59,9 @@ Clients::~Clients() {
vpClients.erase(std::remove_if(vpClients.begin(), vpClients.end(), [this](const WP<Clients> &wptr) { return !wptr.owner_before(m_self) && !m_self.owner_before(wptr); }), vpClients.end());
}
-SP<Client> Clients::newClient() {
+SP<Client> Clients::newClient(std::function<void(SP<Client> &)> cb) {
SP client = SP<Client>(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<Client>(instance.second);
return client;
}