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;
49  size_t sendBufferLimitBytes = DEFAULT_SEND_BUFFER_LIMIT_BYTES;
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>
60  std::function<void(ChannelId, ConnectionHandle)> subscribeHandler;
61  std::function<void(ChannelId, ConnectionHandle)> unsubscribeHandler;
62  std::function<void(const ClientAdvertisement&, ConnectionHandle)> clientAdvertiseHandler;
63  std::function<void(ClientChannelId, ConnectionHandle)> clientUnadvertiseHandler;
64  std::function<void(const ClientMessage&, ConnectionHandle)> clientMessageHandler;
65  std::function<void(const std::vector<std::string>&, const std::optional<std::string>&,
67  parameterRequestHandler;
68  std::function<void(const std::vector<Parameter>&, const std::optional<std::string>&,
70  parameterChangeHandler;
71  std::function<void(const std::vector<std::string>&, ParameterSubscriptionOperation,
73  parameterSubscriptionHandler;
74  std::function<void(const ServiceRequest&, ConnectionHandle)> serviceRequestHandler;
75  std::function<void(bool)> subscribeConnectionGraphHandler;
76 };
77 
78 template <typename ConnectionHandle>
80 public:
81  virtual ~ServerInterface() {}
82  virtual void start(const std::string& host, uint16_t port) = 0;
83  virtual void stop() = 0;
84 
85  virtual std::vector<ChannelId> addChannels(const std::vector<ChannelWithoutId>& channels) = 0;
86  virtual void removeChannels(const std::vector<ChannelId>& channelIds) = 0;
87  virtual void publishParameterValues(ConnectionHandle clientHandle,
88  const std::vector<Parameter>& parameters,
89  const std::optional<std::string>& requestId) = 0;
90  virtual void updateParameterValues(const std::vector<Parameter>& parameters) = 0;
91  virtual std::vector<ServiceId> addServices(const std::vector<ServiceWithoutId>& services) = 0;
92  virtual void removeServices(const std::vector<ServiceId>& serviceIds) = 0;
93 
94  virtual void setHandlers(ServerHandlers<ConnectionHandle>&& handlers) = 0;
95 
96  virtual void sendMessage(ConnectionHandle clientHandle, ChannelId chanId, uint64_t timestamp,
97  const uint8_t* payload, size_t payloadSize) = 0;
98  virtual void broadcastTime(uint64_t timestamp) = 0;
99  virtual void sendServiceResponse(ConnectionHandle clientHandle,
100  const ServiceResponse& response) = 0;
101  virtual void updateConnectionGraph(const MapOfSets& publishedTopics,
102  const MapOfSets& subscribedTopics,
103  const MapOfSets& advertisedServices) = 0;
104 
105  virtual uint16_t getPort() = 0;
106  virtual std::string remoteEndpointString(ConnectionHandle clientHandle) = 0;
107 };
108 
109 } // namespace foxglove
ROSCPP_DECL uint32_t getPort()
ROSCPP_DECL void start()
constexpr size_t DEFAULT_SEND_BUFFER_LIMIT_BYTES
std::function< void(ChannelId, ConnectionHandle)> unsubscribeHandler
std::vector< std::regex > clientTopicWhitelistPatterns
uint32_t ChannelId
Definition: common.hpp:25
std::unordered_map< std::string, std::string > metadata
std::function< void(const ServiceRequest &, ConnectionHandle)> serviceRequestHandler
std::function< void(const ClientAdvertisement &, ConnectionHandle)> clientAdvertiseHandler
std::function< void(ChannelId, ConnectionHandle)> subscribeHandler
std::unordered_map< std::string, std::unordered_set< std::string > > MapOfSets
std::function< void(ClientChannelId, ConnectionHandle)> clientUnadvertiseHandler
std::function< void(bool)> subscribeConnectionGraphHandler
ExeptionWithId(IdType id, const std::string &what_arg)
std::vector< std::string > capabilities
ParameterSubscriptionOperation
Definition: parameter.hpp:11
websocketpp::connection_hdl ConnectionHandle
std::function< void(const ClientMessage &, ConnectionHandle)> clientMessageHandler
const std::string response
std::vector< std::string > supportedEncodings


foxglove_bridge
Author(s): Foxglove
autogenerated on Mon Jul 3 2023 02:12:22