7 #include <shared_mutex>
8 #include <unordered_map>
15 [[nodiscard]] std::unique_ptr<EventSubscriber>
17 std::function<
void(std::shared_ptr<EventMessage> message)> &&
function)
override;
19 void publish(std::unique_ptr<EventMessage> message)
override;
21 void publish_async(std::unique_ptr<EventMessage> message)
override;
27 [[nodiscard]] std::size_t
count();
30 void clear() noexcept;
33 using mutex_type = std::shared_mutex;
34 mutable mutex_type subscribe_mutex_;
35 std::unordered_multimap<int, std::string> registry_;
36 std::unordered_map<std::string, std::function<void(std::shared_ptr<EventMessage>)>>
39 template <
typename Callable>
void shared_access(Callable &&callable) {
41 std::shared_lock<mutex_type> lock(subscribe_mutex_);
43 }
catch (std::system_error &) {
48 template <
typename Callable>
void exclusive_access(Callable &&callable) {
50 std::unique_lock<mutex_type> lock(subscribe_mutex_);
52 }
catch (std::system_error &) {
Implements the default memory-based simulation event bus type.
Definition: event_bus.h:13
void publish_async(std::unique_ptr< EventMessage > message) override
Publishes a message to all subscribers asynchronous.
Definition: event_bus.cpp:33
void clear() noexcept
Clear all registered subscribers.
Definition: event_bus.cpp:67
std::unique_ptr< EventSubscriber > subscribe(EventType event_id, std::function< void(std::shared_ptr< EventMessage > message)> &&function) override
Subscribes a handler function to an event type identifier.
Definition: event_bus.cpp:8
bool unsubscribe(const EventSubscriber &subscriber) override
Unsubscribes from an event notification.
Definition: event_bus.cpp:38
std::size_t count()
Gets the number of registered subscribers.
Definition: event_bus.cpp:60
void publish(std::unique_ptr< EventMessage > message) override
Publishes a message to all subscribers synchronous.
Definition: event_bus.cpp:21
Defines the event aggregator interface type.
Definition: event_aggregator.h:59
Defines the event subscriber interface type.
Definition: event_aggregator.h:37
Top-level namespace for Health-GPS C++ API.
Definition: analysis_definition.h:8
EventType
Event Message type enumeration.
Definition: event_message.h:10