server_interface.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <functional>
4 #include <optional>
5 #include <regex>
6 #include <string>
7 #include <unordered_map>
8 #include <unordered_set>
9 #include <vector>
10 
11 #include "common.hpp"
12 #include "parameter.hpp"
13 
14 namespace foxglove {
15 
16 constexpr size_t DEFAULT_SEND_BUFFER_LIMIT_BYTES = 10000000UL; // 10 MB
17 
18 using MapOfSets = std::unordered_map<std::string, std::unordered_set<std::string>>;
19 
20 template <typename IdType>
21 class ExeptionWithId : public std::runtime_error {
22 public:
23  explicit ExeptionWithId(IdType id, const std::string& what_arg)
24  : std::runtime_error(what_arg)
25  , _id(id) {}
26 
27  IdType id() const {
28  return _id;
29  }
30 
31 private:
32  IdType _id;
33 };
34 
35 class ChannelError : public ExeptionWithId<ChannelId> {
37 };
38 class ClientChannelError : public ExeptionWithId<ClientChannelId> {
40 };
41 class ServiceError : public ExeptionWithId<ServiceId> {
43 };
44 
45 struct ServerOptions {
46  std::vector<std::string> capabilities;
47  std::vector<std::string> supportedEncodings;
48  std::unordered_map<std::string, std::string> metadata;
50  bool useTls = false;
51  std::string certfile = "";
52  std::string keyfile = "";
53  std::string sessionId;
54  bool useCompression = false;
55  std::vector<std::regex> clientTopicWhitelistPatterns;
56 };
57 
58 template <typename ConnectionHandle>
64  std::function<void(const ClientMessage&, ConnectionHandle)> clientMessageHandler;
65  std::function<void(const std::vector<std::string>&, const std::optional<std::string>&,
68  std::function<void(const std::vector<Parameter>&, const std::optional<std::string>&,
71  std::function<void(const std::vector<std::string>&, ParameterSubscriptionOperation,
75  std::function<void(bool)> subscribeConnectionGraphHandler;
76  std::function<void(const std::string&, uint32_t, ConnectionHandle)> fetchAssetHandler;
77 };
78 
79 template <typename ConnectionHandle>
81 public:
82  virtual ~ServerInterface() {}
83  virtual void start(const std::string& host, uint16_t port) = 0;
84  virtual void stop() = 0;
85 
86  virtual std::vector<ChannelId> addChannels(const std::vector<ChannelWithoutId>& channels) = 0;
87  virtual void removeChannels(const std::vector<ChannelId>& channelIds) = 0;
88  virtual void publishParameterValues(ConnectionHandle clientHandle,
89  const std::vector<Parameter>& parameters,
90  const std::optional<std::string>& requestId) = 0;
91  virtual void updateParameterValues(const std::vector<Parameter>& parameters) = 0;
92  virtual std::vector<ServiceId> addServices(const std::vector<ServiceWithoutId>& services) = 0;
93  virtual void removeServices(const std::vector<ServiceId>& serviceIds) = 0;
94 
95  virtual void setHandlers(ServerHandlers<ConnectionHandle>&& handlers) = 0;
96 
97  virtual void sendMessage(ConnectionHandle clientHandle, ChannelId chanId, uint64_t timestamp,
98  const uint8_t* payload, size_t payloadSize) = 0;
99  virtual void broadcastTime(uint64_t timestamp) = 0;
100  virtual void sendServiceResponse(ConnectionHandle clientHandle,
101  const ServiceResponse& response) = 0;
102  virtual void sendServiceFailure(ConnectionHandle clientHandle, ServiceId serviceId,
103  uint32_t callId, const std::string& message) = 0;
104  virtual void updateConnectionGraph(const MapOfSets& publishedTopics,
105  const MapOfSets& subscribedTopics,
106  const MapOfSets& advertisedServices) = 0;
107  virtual void sendFetchAssetResponse(ConnectionHandle clientHandle,
108  const FetchAssetResponse& response) = 0;
109 
110  virtual uint16_t getPort() = 0;
111  virtual std::string remoteEndpointString(ConnectionHandle clientHandle) = 0;
112 };
113 
114 } // namespace foxglove
foxglove::ServerInterface::updateConnectionGraph
virtual void updateConnectionGraph(const MapOfSets &publishedTopics, const MapOfSets &subscribedTopics, const MapOfSets &advertisedServices)=0
foxglove_bridge::ConnectionHandle
websocketpp::connection_hdl ConnectionHandle
Definition: ros1_foxglove_bridge_nodelet.cpp:53
foxglove::ServerInterface::removeChannels
virtual void removeChannels(const std::vector< ChannelId > &channelIds)=0
foxglove
Definition: base64.hpp:8
foxglove::ServerOptions::certfile
std::string certfile
Definition: server_interface.hpp:51
foxglove::ServerHandlers::subscribeConnectionGraphHandler
std::function< void(bool)> subscribeConnectionGraphHandler
Definition: server_interface.hpp:75
foxglove::ServerInterface::sendMessage
virtual void sendMessage(ConnectionHandle clientHandle, ChannelId chanId, uint64_t timestamp, const uint8_t *payload, size_t payloadSize)=0
foxglove::ServerInterface::~ServerInterface
virtual ~ServerInterface()
Definition: server_interface.hpp:82
foxglove::ClientChannelId
uint32_t ClientChannelId
Definition: common.hpp:27
foxglove::ServerInterface::getPort
virtual uint16_t getPort()=0
foxglove::ServerHandlers::clientMessageHandler
std::function< void(const ClientMessage &, ConnectionHandle)> clientMessageHandler
Definition: server_interface.hpp:64
common.hpp
foxglove::ServerInterface::publishParameterValues
virtual void publishParameterValues(ConnectionHandle clientHandle, const std::vector< Parameter > &parameters, const std::optional< std::string > &requestId)=0
foxglove::ServiceResponse
Definition: common.hpp:130
foxglove::ServerHandlers::serviceRequestHandler
std::function< void(const ServiceRequest &, ConnectionHandle)> serviceRequestHandler
Definition: server_interface.hpp:74
foxglove::ServerHandlers::parameterChangeHandler
std::function< void(const std::vector< Parameter > &, const std::optional< std::string > &, ConnectionHandle)> parameterChangeHandler
Definition: server_interface.hpp:70
foxglove::FetchAssetResponse
Definition: common.hpp:155
foxglove::ParameterSubscriptionOperation
ParameterSubscriptionOperation
Definition: parameter.hpp:11
foxglove::ServerOptions::supportedEncodings
std::vector< std::string > supportedEncodings
Definition: server_interface.hpp:47
foxglove::ServerOptions::keyfile
std::string keyfile
Definition: server_interface.hpp:52
foxglove::ServerHandlers::fetchAssetHandler
std::function< void(const std::string &, uint32_t, ConnectionHandle)> fetchAssetHandler
Definition: server_interface.hpp:76
foxglove::ClientChannelError
Definition: server_interface.hpp:38
foxglove::ServerInterface::stop
virtual void stop()=0
foxglove::ServerOptions::useCompression
bool useCompression
Definition: server_interface.hpp:54
foxglove::DEFAULT_SEND_BUFFER_LIMIT_BYTES
constexpr size_t DEFAULT_SEND_BUFFER_LIMIT_BYTES
Definition: server_interface.hpp:16
foxglove::ServerHandlers::unsubscribeHandler
std::function< void(ChannelId, ConnectionHandle)> unsubscribeHandler
Definition: server_interface.hpp:61
foxglove::ServerOptions::useTls
bool useTls
Definition: server_interface.hpp:50
foxglove::ServerOptions
Definition: server_interface.hpp:45
foxglove::ChannelError
Definition: server_interface.hpp:35
foxglove::ServerHandlers
Definition: server_interface.hpp:59
foxglove::ServerHandlers::subscribeHandler
std::function< void(ChannelId, ConnectionHandle)> subscribeHandler
Definition: server_interface.hpp:60
foxglove::ClientAdvertisement
Definition: common.hpp:77
foxglove::ServerInterface::setHandlers
virtual void setHandlers(ServerHandlers< ConnectionHandle > &&handlers)=0
foxglove::ServerInterface::updateParameterValues
virtual void updateParameterValues(const std::vector< Parameter > &parameters)=0
foxglove::ServerInterface::remoteEndpointString
virtual std::string remoteEndpointString(ConnectionHandle clientHandle)=0
foxglove::ServerOptions::sessionId
std::string sessionId
Definition: server_interface.hpp:53
foxglove::ClientMessage
Definition: common.hpp:85
foxglove::ServerInterface::start
virtual void start(const std::string &host, uint16_t port)=0
foxglove::ExeptionWithId
Definition: server_interface.hpp:21
foxglove::ExeptionWithId::id
IdType id() const
Definition: server_interface.hpp:27
foxglove::ServerOptions::capabilities
std::vector< std::string > capabilities
Definition: server_interface.hpp:46
foxglove::ServerInterface::removeServices
virtual void removeServices(const std::vector< ServiceId > &serviceIds)=0
foxglove::ServerInterface::addChannels
virtual std::vector< ChannelId > addChannels(const std::vector< ChannelWithoutId > &channels)=0
parameter.hpp
foxglove::MapOfSets
std::unordered_map< std::string, std::unordered_set< std::string > > MapOfSets
Definition: server_interface.hpp:18
foxglove::ServerInterface
Definition: server_interface.hpp:80
foxglove::ServerHandlers::clientUnadvertiseHandler
std::function< void(ClientChannelId, ConnectionHandle)> clientUnadvertiseHandler
Definition: server_interface.hpp:63
std
foxglove::ServerHandlers::parameterRequestHandler
std::function< void(const std::vector< std::string > &, const std::optional< std::string > &, ConnectionHandle)> parameterRequestHandler
Definition: server_interface.hpp:67
foxglove::ServerInterface::sendServiceResponse
virtual void sendServiceResponse(ConnectionHandle clientHandle, const ServiceResponse &response)=0
foxglove::ServerOptions::sendBufferLimitBytes
size_t sendBufferLimitBytes
Definition: server_interface.hpp:49
foxglove::ServiceError
Definition: server_interface.hpp:41
foxglove::ChannelId
uint32_t ChannelId
Definition: common.hpp:26
foxglove::ExeptionWithId::_id
IdType _id
Definition: server_interface.hpp:32
foxglove::ServerHandlers::clientAdvertiseHandler
std::function< void(const ClientAdvertisement &, ConnectionHandle)> clientAdvertiseHandler
Definition: server_interface.hpp:62
foxglove::ServerInterface::broadcastTime
virtual void broadcastTime(uint64_t timestamp)=0
foxglove::ServerInterface::sendServiceFailure
virtual void sendServiceFailure(ConnectionHandle clientHandle, ServiceId serviceId, uint32_t callId, const std::string &message)=0
foxglove::ServerOptions::clientTopicWhitelistPatterns
std::vector< std::regex > clientTopicWhitelistPatterns
Definition: server_interface.hpp:55
foxglove::ServiceId
uint32_t ServiceId
Definition: common.hpp:29
foxglove::ServerInterface::addServices
virtual std::vector< ServiceId > addServices(const std::vector< ServiceWithoutId > &services)=0
foxglove::ServerInterface::sendFetchAssetResponse
virtual void sendFetchAssetResponse(ConnectionHandle clientHandle, const FetchAssetResponse &response)=0
foxglove::ServerOptions::metadata
std::unordered_map< std::string, std::string > metadata
Definition: server_interface.hpp:48
foxglove::ServerHandlers::parameterSubscriptionHandler
std::function< void(const std::vector< std::string > &, ParameterSubscriptionOperation, ConnectionHandle)> parameterSubscriptionHandler
Definition: server_interface.hpp:73
foxglove::ExeptionWithId::ExeptionWithId
ExeptionWithId(IdType id, const std::string &what_arg)
Definition: server_interface.hpp:23


foxglove_bridge
Author(s): Foxglove
autogenerated on Wed Mar 5 2025 03:34:31