#pragma once #include "screencast/network/transport.h" #include #include #include #include #include namespace sc { // JSON-based control messages exchanged before or during a session. struct SessionOffer { std::string session_id; std::string codec_name; int width = 0; int height = 0; int frame_rate_num = 30; int frame_rate_den = 1; Endpoint rtp_endpoint; }; struct SessionAnswer { std::string session_id; Endpoint rtp_endpoint; }; using SignalingMessage = std::variant; class SignalingChannel { public: using MessageCallback = std::function; virtual ~SignalingChannel() = default; virtual bool connect(const Endpoint& server) = 0; virtual void send(const SignalingMessage& message) = 0; virtual void on_message(MessageCallback callback) = 0; virtual void disconnect() = 0; }; class SignalingFactory { public: static std::unique_ptr create_websocket_client(); static std::unique_ptr create_websocket_server(uint16_t port); }; } // namespace sc