Health-GPS  1.2.2.0
Global Health Policy Simulation model (Health-GPS)
event_monitor.h
Go to the documentation of this file.
1 #pragma once
2 #include <thread>
3 
4 #include <oneapi/tbb/concurrent_queue.h>
5 
7 
8 #include "result_writer.h"
9 
10 namespace host {
16  public:
17  EventMonitor() = delete;
18 
22  EventMonitor(hgps::EventAggregator &event_bus, ResultWriter &result_writer);
23 
25  ~EventMonitor() noexcept;
26 
28  void stop() noexcept;
29 
30  void visit(const hgps::RunnerEventMessage &message) override;
31  void visit(const hgps::InfoEventMessage &message) override;
32  void visit(const hgps::ErrorEventMessage &message) override;
33  void visit(const hgps::ResultEventMessage &message) override;
34 
35  private:
36  ResultWriter &result_writer_;
37  std::vector<std::jthread> threads_;
38  std::vector<std::unique_ptr<hgps::EventSubscriber>> handlers_;
39  tbb::concurrent_queue<std::shared_ptr<hgps::EventMessage>> info_queue_;
40  tbb::concurrent_queue<std::shared_ptr<hgps::EventMessage>> results_queue_;
41  std::stop_source cancel_source_;
42 
43  void info_event_handler(std::shared_ptr<hgps::EventMessage> message);
44  void error_event_handler(std::shared_ptr<hgps::EventMessage> message);
45  void result_event_handler(std::shared_ptr<hgps::EventMessage> message);
46 
47  void info_dispatch_thread(std::stop_token token);
48  void result_dispatch_thread(std::stop_token token);
49 };
50 } // namespace host
Defines the event aggregator interface type.
Definition: event_aggregator.h:59
Event message types visitor interface (double dispatcher)
Definition: event_visitor.h:10
Defines the event subscriber interface type.
Definition: event_aggregator.h:37
Defined the event monitor class used for processing Health-GPS event messages.
Definition: event_monitor.h:15
void stop() noexcept
Stops the monitor, no new messages are processed after stop.
Definition: event_monitor.cpp:44
void visit(const hgps::RunnerEventMessage &message) override
Visits a hgps::RunnerEventMessage message type.
Definition: event_monitor.cpp:49
~EventMonitor() noexcept
Destroys a host::EventMonitor instance.
Definition: event_monitor.cpp:36
Defines the Health-GPS results message writer interface.
Definition: result_writer.h:7
Top-level namespace for Health-GPS C++ API.
Definition: analysis_definition.h:8
Top-level namespace for Health-GPS Console host application.
Definition: configuration.cpp:31
Global namespace.
Definition: jsonparser.h:88
Implements the simulation error event message data type.
Definition: error_message.h:7
Simulation event messages interface.
Definition: event_message.h:25
Implements the simulation information event message data type.
Definition: info_message.h:19
Implements the simulation results event message data type.
Definition: result_message.h:8
Implements the simulation executive event message data type.
Definition: runner_message.h:25