20#ifndef ORES_COMMS_SERVICE_SUBSCRIPTION_MANAGER_HPP
21#define ORES_COMMS_SERVICE_SUBSCRIPTION_MANAGER_HPP
29#include <unordered_map>
30#include <unordered_set>
31#include "ores.utility/log/make_logger.hpp"
33namespace ores::comms::service {
41using notification_callback =
42 std::function<bool(
const std::string&, std::chrono::system_clock::time_point)>;
50using session_id = std::string;
85 [[nodiscard]]
static auto& lg() {
87 static auto instance = make_logger(
88 "ores.comms.service.subscription_manager");
93 notification_callback callback;
94 std::unordered_set<std::string> subscribed_events;
114 void register_session(
const session_id&
id, notification_callback callback);
133 bool subscribe(
const session_id&
id,
const std::string& event_type);
143 bool unsubscribe(
const session_id&
id,
const std::string& event_type);
156 std::size_t
notify(
const std::string& event_type,
157 std::chrono::system_clock::time_point timestamp);
165 [[nodiscard]] std::size_t
subscriber_count(
const std::string& event_type)
const;
180 [[nodiscard]] std::vector<std::string>
get_subscriptions(
const session_id&
id)
const;
183 mutable std::mutex mutex_;
184 std::unordered_map<session_id, session_info> sessions_;
185 std::unordered_map<std::string, std::unordered_set<session_id>> event_subscribers_;
Implements logging for ORE Studio.
Definition lifecycle_manager.hpp:30
Manages client subscriptions to event notifications.
Definition subscription_manager.hpp:83
std::size_t session_count() const
Get the total number of registered sessions.
Definition subscription_manager.cpp:219
std::vector< std::string > get_subscriptions(const session_id &id) const
Get the event types a session is subscribed to.
Definition subscription_manager.cpp:224
void unregister_session(const session_id &id)
Unregister a session from the subscription manager.
Definition subscription_manager.cpp:45
bool subscribe(const session_id &id, const std::string &event_type)
Subscribe a session to an event type.
Definition subscription_manager.cpp:78
bool unsubscribe(const session_id &id, const std::string &event_type)
Unsubscribe a session from an event type.
Definition subscription_manager.cpp:109
void register_session(const session_id &id, notification_callback callback)
Register a new session with the subscription manager.
Definition subscription_manager.cpp:26
std::size_t subscriber_count(const std::string &event_type) const
Get the number of subscribers for an event type.
Definition subscription_manager.cpp:208
std::size_t notify(const std::string &event_type, std::chrono::system_clock::time_point timestamp)
Notify all subscribers of an event.
Definition subscription_manager.cpp:148