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.logging/make_logger.hpp"
42 std::function<bool(
const std::string&, std::chrono::system_clock::time_point,
43 const std::vector<std::string>&)>;
86 [[nodiscard]]
static auto& lg() {
88 static auto instance = make_logger(
89 "ores.comms.service.subscription_manager");
95 std::unordered_set<std::string> subscribed_events;
158 std::size_t
notify(
const std::string& event_type,
159 std::chrono::system_clock::time_point timestamp,
160 const std::vector<std::string>& entity_ids = {});
168 [[nodiscard]] std::size_t
subscriber_count(
const std::string& event_type)
const;
186 mutable std::mutex mutex_;
187 std::unordered_map<session_id, session_info> sessions_;
188 std::unordered_map<std::string, std::unordered_set<session_id>> event_subscribers_;
Main server application for ORE Studio.
Definition application.hpp:30
std::string session_id
Unique identifier for a client session.
Definition subscription_manager.hpp:51
std::function< bool(const std::string &, std::chrono::system_clock::time_point, const std::vector< std::string > &)> notification_callback
Callback type for pushing notifications to clients.
Definition subscription_manager.hpp:43
Implements logging infrastructure for ORE Studio.
Definition boost_severity.hpp:28
Manages client subscriptions to event notifications.
Definition subscription_manager.hpp:84
std::size_t session_count() const
Get the total number of registered sessions.
Definition subscription_manager.cpp:221
std::vector< std::string > get_subscriptions(const session_id &id) const
Get the event types a session is subscribed to.
Definition subscription_manager.cpp:226
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
std::size_t notify(const std::string &event_type, std::chrono::system_clock::time_point timestamp, const std::vector< std::string > &entity_ids={})
Notify all subscribers of an event.
Definition subscription_manager.cpp:148
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:210