23 using MessageHandler = std::function<std::expected<std::string, std::string>(std::string_view)>;
37 [[nodiscard]]
bool start() noexcept;
39 [[nodiscard]]
bool is_running()
const {
return m_running.load(std::memory_order_acquire); }
50 std::optional<std::string_view> target_session = std::nullopt);
63 friend class ClientSession;
66 std::atomic<bool> m_running {
false };
67 int m_next_client_id { 1 };
80 std::unordered_map<int, std::shared_ptr<ClientSession>>
m_sessions;
Thread-safe event subscription and publishing system for Lila.
Server(const Server &)=delete
void broadcast_to_all(std::string_view message)
ConnectionHandler m_disconnect_handler
void process_control_message(int client_id, std::string_view message)
asio::io_context m_io_context
std::shared_mutex m_clients_mutex
void remove_session(int client_id)
std::unique_ptr< asio::ip::tcp::acceptor > m_acceptor
void set_message_handler(MessageHandler handler)
void set_client_session(int client_id, std::string session_id)
std::optional< std::string > get_client_session(int client_id) const
std::function< void(const ClientInfo &)> ConnectionHandler
Handler for client connection/disconnection events.
std::unordered_map< int, std::shared_ptr< ClientSession > > m_sessions
void on_client_disconnected(ConnectionHandler handler)
void register_session(const std::shared_ptr< ClientSession > &session)
Server & operator=(const Server &)=delete
MessageHandler m_message_handler
void on_client_connected(ConnectionHandler handler)
StartHandler m_start_handler
void broadcast_event(const StreamEvent &event, std::optional< std::string_view > target_session=std::nullopt)
ConnectionHandler m_connect_handler
std::function< void()> StartHandler
Handler for server start events.
std::vector< ClientInfo > get_connected_clients() const
void on_server_started(StartHandler handler)
std::function< std::expected< std::string, std::string >(std::string_view)> MessageHandler
Handler for processing incoming client messages.
const EventBus & event_bus() const noexcept
TCP server for interactive live coding sessions in MayaFlux.
Information about a connected client.
Represents a published event in the system.