14#include <unordered_map>
22namespace subscription {
35template <
typename... Args>
class Publisher {
40 Publisher() =
default;
53 std::lock_guard<std::mutex> lock(_mutex);
54 _subscribers.emplace(token, std::move(callback));
66 std::lock_guard<std::mutex> lock(_mutex);
67 _subscribers.erase(token);
80 for (
const auto& cb : callbacks) {
97 std::vector<Callback> callbacks;
99 std::lock_guard<std::mutex> lock(_mutex);
100 callbacks.reserve(_subscribers.size());
101 for (
const auto& [token, cb] : _subscribers) {
103 callbacks.push_back(cb);
111 mutable std::mutex _mutex;
112 std::unordered_map<SubscriberToken, Callback> _subscribers;
Opaque token identifying a subscription.
RAII wrapper pairing a SubscriberToken with its cancel function.
std::function< void(Args...)> Callback
Callback type for subscribers.
Definition Publisher.hpp:38
void unsubscribe(SubscriberToken token)
Remove a previously registered callback.
Definition Publisher.hpp:65
std::vector< Callback > copySubscribers() const
Copy the current subscriber list under lock.
Definition Publisher.hpp:96
void publish(Args... args) const
Invoke all registered callbacks with the given arguments.
Definition Publisher.hpp:78
Subscription subscribe(Callback callback)
Register a callback.
Definition Publisher.hpp:47
Move-only RAII wrapper that pairs a SubscriberToken with an unsubscribe callable. Destroying a Subscr...
Definition Subscription.hpp:30
Opaque token identifying a subscription (state or device group).
Definition SubscriberToken.hpp:22
static SubscriberToken getNextToken() noexcept
Get the next token.
Definition SubscriberToken.hpp:40