diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-06-22 17:38:23 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-06-22 18:04:43 +0800 |
| commit | c76c01d1fd2ccbf91a6c3e0a120ed68c37ff106b (patch) | |
| tree | ba3f7bf6402539c0ca65eb8a3b88d85ed6b526eb /src | |
| parent | 0028a4673d092e0dc8c57cce75cb158ad09826de (diff) | |
API(server/clients:newClient): allow setting independent clients to wait
fix!(server/clients:newClient): pass m_track also
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/client.cpp | 4 | ||||
| -rw-r--r-- | src/server/clients.cpp | 13 |
2 files changed, 8 insertions, 9 deletions
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> server, SP<Clients> clients, bool track, bool oneShot) +Client::Client(SP<Server> server, SP<Clients> 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<std::function<bool(const std::vector m_vClients.clear(); } -Clients::Clients(bool wait) - : m_wait(wait) { +Clients::Clients() { if (std::atexit([]() { for (auto c : vpClients) if (const auto p = c.lock()) @@ -37,8 +36,8 @@ Clients::Clients(bool wait) void(); // failed to register exit handler... } -SP<Clients> Clients::create(WP<Server> server, bool wait) { - auto c = SP<Clients>(new Clients(wait)); +SP<Clients> Clients::create(WP<Server> server) { + auto c = SP<Clients>(new Clients()); vpClients.emplace_back(c); c->m_self = c; c->m_wpServer = server; @@ -54,14 +53,14 @@ WP<Clients> 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>(client)); } 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(std::function<void(SP<Client> &)> cb) { - SP client = SP<Client>(new Client(m_wpServer.lock(), shared_from_this())); +SP<Client> Clients::newClient(std::function<void(SP<Client> &)> cb, bool track, bool wait) { + SP client = SP<Client>(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<Client>(instance.second); return client; |
