3#include "raccoon/Transport.h"
11#include <unordered_map>
12#include <unordered_set>
20 using RawHandler = std::function<void(
const void*,
int)>;
25 const std::string& channel,
30 int retry_interval_ms,
31 std::uint32_t max_retries);
33 template <raccoon::TransportMessage T>
35 const std::string& channel,
37 const raccoon::PublishOptions& options = {})
40 return transport_.publish<T>(channel, message, options);
44 const std::string& channel,
47 bool request_retained);
49 template <raccoon::TransportMessage T>
51 const std::string& channel,
52 std::function<
void(
const T&)> handler,
53 const raccoon::SubscribeOptions& options = {})
60#if defined(__GNUC__) || defined(__clang__)
61# pragma GCC diagnostic push
62# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
64 const bool reliable_passthrough = options.reliable;
65#if defined(__GNUC__) || defined(__clang__)
66# pragma GCC diagnostic pop
70 [handler = std::move(handler)](
const void* data,
int data_len)
73 if (msg.decode(
static_cast<const uint8_t*
>(data), data_len) >= 0)
79 options.requestRetained);
94 void ensure_started();
96 raccoon::Transport transport_;
97 mutable std::mutex mu_;
98 std::unordered_map<std::string, std::unordered_map<std::uint64_t, RawHandler>> channel_handlers_;
99 std::unordered_map<std::uint64_t, std::string> subscription_channels_;
100 std::unordered_set<std::string> subscribed_channels_;
101 std::atomic<std::uint64_t> next_subscription_id_{1};
static SharedTransport & instance()
raccoon::TransportStats get_and_reset_stats()
bool publish_raw(const std::string &channel, const void *data, int data_len, bool reliable, bool retained, int retry_interval_ms, std::uint32_t max_retries)
void unsubscribe(std::uint64_t subscription_id)
std::uint64_t subscribe(const std::string &channel, std::function< void(const T &)> handler, const raccoon::SubscribeOptions &options={})
std::uint64_t subscribe_raw(const std::string &channel, RawHandler handler, bool reliable, bool request_retained)
SharedTransport(const SharedTransport &)=delete
bool publish(const std::string &channel, const T &message, const raccoon::PublishOptions &options={})
SharedTransport & operator=(const SharedTransport &)=delete
std::function< void(const void *, int)> RawHandler
std::size_t active_subscription_count() const