.. _program_listing_file_foxglove_include_foxglove_server.hpp: Program Listing for File server.hpp =================================== |exhale_lsh| :ref:`Return to documentation for file ` (``foxglove/include/foxglove/server.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include enum foxglove_error : uint8_t; struct foxglove_websocket_server; struct foxglove_connection_graph; struct foxglove_client; namespace foxglove { struct ClientChannel { uint32_t id; std::string_view topic; std::string_view encoding; std::string_view schema_name; std::string_view schema_encoding; const std::byte* schema; size_t schema_len; }; struct ClientMetadata { uint32_t id; std::optional sink_id; }; enum class WebSocketServerCapabilities : uint8_t { ClientPublish = 1 << 0, ConnectionGraph = 1 << 1, Parameters = 1 << 2, Time = 1 << 3, Services = 1 << 4, Assets = 1 << 5, RangedPlayback = 1 << 6, }; enum class WebSocketServerStatusLevel : uint8_t { Info = 0, Warning = 1, Error = 2, }; inline WebSocketServerCapabilities operator|( WebSocketServerCapabilities a, WebSocketServerCapabilities b ) { return WebSocketServerCapabilities(uint8_t(a) | uint8_t(b)); } inline WebSocketServerCapabilities operator&( WebSocketServerCapabilities a, WebSocketServerCapabilities b ) { return WebSocketServerCapabilities(uint8_t(a) & uint8_t(b)); } struct WebSocketServerCallbacks { std::function onSubscribe; std::function onUnsubscribe; std::function onClientAdvertise; std::function< void(uint32_t client_id, uint32_t client_channel_id, const std::byte* data, size_t data_len)> onMessageData; std::function onClientUnadvertise; std::function( uint32_t client_id, std::optional request_id, const std::vector& param_names )> onGetParameters; std::function( uint32_t client_id, std::optional request_id, const std::vector& params )> onSetParameters; std::function& param_names)> onParametersSubscribe; std::function& param_names)> onParametersUnsubscribe; std::function onConnectionGraphSubscribe; std::function onConnectionGraphUnsubscribe; std::function(const PlaybackControlRequest& playback_control_request )> onPlaybackControlRequest; }; struct TlsIdentity { std::vector cert; std::vector key; }; struct WebSocketServerOptions { friend class WebSocketServer; Context context; std::string name; std::string host = "127.0.0.1"; uint16_t port = 8765; WebSocketServerCallbacks callbacks; WebSocketServerCapabilities capabilities = WebSocketServerCapabilities(0); std::vector supported_encodings; FetchAssetHandler fetch_asset; SinkChannelFilterFn sink_channel_filter; std::optional tls_identity = std::nullopt; std::optional> server_info = std::nullopt; std::optional> playback_time_range = std::nullopt; }; class WebSocketServer final { public: static FoxgloveResult create(WebSocketServerOptions&& options); [[nodiscard]] uint16_t port() const; FoxgloveError stop(); void broadcastTime(uint64_t timestamp_nanos) const noexcept; void broadcastPlaybackState(const PlaybackState& playback_state) const noexcept; [[nodiscard]] FoxgloveError clearSession( std::optional session_id = std::nullopt ) const noexcept; [[nodiscard]] FoxgloveError addService(Service&& service) const noexcept; [[nodiscard]] FoxgloveError removeService(std::string_view name) const noexcept; void publishParameterValues(std::vector&& params); void publishConnectionGraph(ConnectionGraph& graph); [[nodiscard]] FoxgloveError publishStatus( WebSocketServerStatusLevel level, std::string_view message, std::optional id = std::nullopt ) const noexcept; [[nodiscard]] FoxgloveError removeStatus(const std::vector& ids) const; private: WebSocketServer( foxglove_websocket_server* server, std::unique_ptr callbacks, std::unique_ptr fetch_asset, std::unique_ptr sink_channel_filter ); std::unique_ptr callbacks_; std::unique_ptr fetch_asset_; std::unique_ptr sink_channel_filter_; std::unique_ptr impl_; }; } // namespace foxglove