diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-06-19 16:38:12 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-06-19 16:38:12 +0800 |
| commit | 35216c30aea2f85966bb59999ad7293726b5cacb (patch) | |
| tree | 546b76d70a5e253c949b32b0c6e4f332532d4c06 /include/libsock/server/clients.hpp | |
| parent | 3a8b5d69fcfa647146bbdf55657624915e1f9549 (diff) | |
internal: seperate client and clientmanager header
Diffstat (limited to 'include/libsock/server/clients.hpp')
| -rw-r--r-- | include/libsock/server/clients.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/include/libsock/server/clients.hpp b/include/libsock/server/clients.hpp new file mode 100644 index 0000000..9b94127 --- /dev/null +++ b/include/libsock/server/clients.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include "../types.hpp" +#include <any> +#include <functional> +#include <optional> +#include <string> +#include <thread> +#include <vector> + +namespace LibSock { +namespace Server { + +class Client; + +struct SData { + std::string msg; + std::optional<WP<Client>> sender = std::nullopt; +}; +class Clients { + public: + Clients(); + ~Clients(); + + WP<Client> newClient( + std::optional<std::function<std::any(WP<Client>)>> cb = std::nullopt + ); + + void broadcast(const std::string &msg, + std::optional<WP<Client>> self = std::nullopt); // second param only specified when we + // want to exclude the sender + void kick(WP<Client> client, const bool kill = false, const std::string &reason = "", std::optional<std::function<std::any(const std::vector<std::pair<std::jthread, SP<Client>>>::iterator &)>> cb = std::nullopt); + void addClient(const Client &client); + + void shutdownClients(std::optional<std::function<std::any(const std::vector<std::pair<std::jthread, SP<Client>>> &)>> cb = std::nullopt); + + SP<Client> getByIp(const std::string &ip) const; + std::vector<SP<Client>> getClients() const; + std::vector<SData> getDatas() const; + + private: + void broadcast(const SData &msg); + + std::vector<std::pair<std::jthread, SP<Client>>> m_vClients; + std::vector<SData> m_vDatas; + + friend class Client; +}; + +} // namespace Server +} // namespace LibSock |
