#pragma once #include "session.h" #include "config/server_config.h" #include "database/database.h" #include "auth/authenticator.h" #include #include #include #include #include namespace scar { class Server { public: Server(const ServerConfig& config); void run(); void stop(); // Session management void addSession(std::shared_ptr session); void removeSession(std::shared_ptr session); // Broadcasting void broadcastMessage(const TextMessage& message); void broadcastToOthers(const Message& message, std::shared_ptr exclude); private: void doAccept(); boost::asio::io_context io_context_; boost::asio::ssl::context ssl_context_; boost::asio::ip::tcp::acceptor acceptor_; std::shared_ptr database_; std::shared_ptr authenticator_; std::set> sessions_; std::mutex sessions_mutex_; ServerConfig config_; }; } // namespace scar