summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-06-16 19:25:57 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-06-16 22:22:10 +0800
commitb46ba43e06aba714abc0afb29566a56d69891691 (patch)
tree2f8ede6c777b37254b58c3a998ad540e476024a0 /src
parent366e5004e6f09f69d945a1f41816cef08e442a2b (diff)
fix!: create new client without SP<Clients>(this) param
API: removed run(), use newClient() to accept a new client, now returning a WP of the client instance API: allow all cb to return std::any
Diffstat (limited to 'src')
-rw-r--r--src/server/client.cpp10
-rw-r--r--src/server/clients.cpp15
2 files changed, 10 insertions, 15 deletions
diff --git a/src/server/client.cpp b/src/server/client.cpp
index 5de8b79..f8dc1ca 100644
--- a/src/server/client.cpp
+++ b/src/server/client.cpp
@@ -75,8 +75,7 @@ void SRecvData::sanitize() {
data.clear();
}
-UP<SRecvData>
-Client::read(std::optional<std::function<void(const SRecvData &)>> cb) {
+UP<SRecvData> Client::read(std::optional<std::function<std::any(const SRecvData &)>> cb) {
auto recvData = std::make_unique<SRecvData>();
recvData->data.resize(recvData->size);
@@ -99,11 +98,10 @@ Client::read(std::optional<std::function<void(const SRecvData &)>> cb) {
return recvData;
}
-UP<SRecvData>
-Client::read(const std::string &msg, std::optional<std::function<void(const SRecvData &)>> cb) {
+UP<SRecvData> Client::read(const std::string &msg, std::optional<std::function<std::any(const SRecvData &)>> cb) {
write("{}", msg);
m_szReading = msg;
- return read();
+ return read(cb);
}
void Client::run() {
@@ -126,7 +124,7 @@ bool Client::isValid() {
err == 0;
}
-bool Client::write(const std::string &msg, std::optional<std::function<void(const SRecvData &)>> cb) {
+bool Client::write(const std::string &msg, std::optional<std::function<std::any(const SRecvData &)>> cb) {
const auto r = write("{}", msg);
if (cb) {
auto recvData = std::make_unique<SRecvData>();
diff --git a/src/server/clients.cpp b/src/server/clients.cpp
index 5fc63df..210581a 100644
--- a/src/server/clients.cpp
+++ b/src/server/clients.cpp
@@ -1,5 +1,6 @@
#include "libsock/server/client.hpp"
#include <algorithm>
+#include <any>
#include <format>
#include <ranges>
#include <unistd.h>
@@ -44,17 +45,13 @@ Clients::~Clients() {
}
}
-void Clients::newClient(std::optional<std::function<void()>> cb) {
- if (cb)
- (*cb)();
- SP client = std::make_shared<Client>(pServer, SP<Clients>(this));
+WP<Client> Clients::newClient(std::optional<std::function<std::any(WP<Client>)>> cb) {
+ SP client = std::make_shared<Client>();
auto &instance = m_vClients.emplace_back(std::jthread([client]() { client->run(); }), client);
instance.second->self = std::weak_ptr<Client>(instance.second);
-}
-
-void Clients::run(std::optional<std::function<void()>> cb) {
- while (true)
- newClient(cb);
+ if (cb)
+ (*cb)(instance.second);
+ return instance.second;
}
void Clients::broadcast(const std::string &msg, std::optional<std::weak_ptr<Client>> self) {