#pragma once #include "chatManager.hpp" #include "format.hpp" #include "session.hpp" #include #include #include class CSessionManager { public: CSessionManager(); ~CSessionManager(); void newSession(); void run(); void broadcast(const std::string &msg, std::optional> self = std::nullopt) const; // second param only specified when we want to exclude the sender void kick(std::weak_ptr session, const bool kill = false, const std::string &reason = ""); void addSession(const CSession &session); bool nameExists(const std::string &name); void shutdownSessions(); std::shared_ptr getByName(const std::string &name) const; std::shared_ptr getByIp(const std::string &ip) const; std::vector> getSessions() const; // Safer weak_ptr versions - recommended for most use cases to avoid accidental lifetime extension std::weak_ptr getByNameWeak(const std::string &name) const; std::weak_ptr getByIpWeak(const std::string &ip) const; private: void broadcast(const CChatManager::SMessage &msg) const; std::vector>> m_vSessions; friend class CChatManager; }; inline std::shared_ptr g_pSessionManager;