summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-06-22 15:09:42 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-06-22 15:09:42 +0800
commit9b61c218b665f94f5cc383a5e607b951ce6af121 (patch)
tree1de1bec4da34170a15737117a02023a39f673ade /include
parent47375901d5158aa82c3178fe0840c5b77f142720 (diff)
refactor(server): properly use weak pointer
API!(server/client:create): require manually specifying server API!(server/client:newClient): now returns a SP instead of WP
Diffstat (limited to 'include')
-rw-r--r--include/libsock/server/client.hpp7
-rw-r--r--include/libsock/server/clients.hpp11
-rw-r--r--include/libsock/server/server.hpp7
3 files changed, 17 insertions, 8 deletions
diff --git a/include/libsock/server/client.hpp b/include/libsock/server/client.hpp
index 2549ef5..591bc2a 100644
--- a/include/libsock/server/client.hpp
+++ b/include/libsock/server/client.hpp
@@ -48,9 +48,12 @@ class Client {
bool isValid();
private:
- Client(SP<Server> server = pServer, SP<Clients> clients = pClients, bool track = false, bool oneShot = true);
+ Client(SP<Server> server, SP<Clients> clients, bool track = false, bool oneShot = true);
+
+ WP<Client> m_self;
+ WP<Server> m_wpServer;
+ WP<Clients> m_wpClients;
- WP<Client> self;
SP<LibSock::CFileDescriptor> m_sockfd;
sockaddr_in m_addr;
socklen_t m_addrLen = sizeof(m_addr);
diff --git a/include/libsock/server/clients.hpp b/include/libsock/server/clients.hpp
index d8c1921..b18c043 100644
--- a/include/libsock/server/clients.hpp
+++ b/include/libsock/server/clients.hpp
@@ -21,10 +21,10 @@ struct SData {
class Clients : public std::enable_shared_from_this<Clients> {
public:
- static SP<Clients> create();
+ static SP<Clients> create(WP<Server> server);
~Clients();
- WP<Client> newClient(std::function<void(const WP<Client> &)> loopFunc = [](const WP<Client> &) { ; }, SP<Server> server = pServer);
+ SP<Client> newClient(std::function<void(const WP<Client> &)> loopFunc = [](const WP<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
@@ -44,10 +44,13 @@ class Clients : public std::enable_shared_from_this<Clients> {
std::vector<std::pair<std::jthread, SP<Client>>> m_vClients;
std::vector<SData> m_vDatas;
- SP<Clients> get();
+ WP<Clients> get();
+
+ WP<Clients> m_self;
+ WP<Server> m_wpServer;
friend class Client;
};
-inline SP<Clients> pClients;
+inline std::vector<WP<Clients>> vpClients;
} // namespace Server
} // namespace LibSock
diff --git a/include/libsock/server/server.hpp b/include/libsock/server/server.hpp
index 225bdb0..f980c97 100644
--- a/include/libsock/server/server.hpp
+++ b/include/libsock/server/server.hpp
@@ -4,6 +4,7 @@
#include <memory>
#include <mutex>
#include <netinet/in.h>
+#include <vector>
namespace LibSock {
namespace Server {
@@ -20,10 +21,12 @@ class Server : public std::enable_shared_from_this<Server> {
sockaddr_in m_addr;
uint16_t m_port;
- SP<Server> get();
+ WP<Server> get();
+
+ WP<Server> m_self;
mutable std::mutex m_mutex;
};
-inline SP<Server> pServer;
+inline std::vector<SP<Server>> vpServer;
} // namespace Server
} // namespace LibSock