Health-GPS 3.0.0.0
Global Health Policy Simulation model (Health-GPS)
Loading...
Searching...
No Matches
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#include <oneapi/tbb/task_group.h>
6
8
10#include "result_writer.h"
11
12namespace hgps {
20 public:
21 EventMonitor() = delete;
22
28 EventMonitor(hgps::EventAggregator &event_bus, ResultWriter &result_writer,
29 IndividualIDTrackingWriter *individual_tracking_writer = nullptr);
30
32 ~EventMonitor() noexcept;
33
35 void stop() noexcept;
36
37 void visit(const hgps::RunnerEventMessage &message) override;
38 void visit(const hgps::InfoEventMessage &message) override;
39 void visit(const hgps::ErrorEventMessage &message) override;
40 void visit(const hgps::ResultEventMessage &message) override;
41 void visit(const hgps::IndividualTrackingEventMessage &message) override;
42
43 private:
44 ResultWriter &result_writer_;
45 IndividualIDTrackingWriter *individual_tracking_writer_{nullptr};
46 tbb::task_group_context tg_context_;
47 tbb::task_group tg_;
48 std::vector<std::unique_ptr<hgps::EventSubscriber>> handlers_;
49 tbb::concurrent_queue<std::shared_ptr<hgps::EventMessage>> info_queue_;
50 tbb::concurrent_queue<std::shared_ptr<hgps::EventMessage>> results_queue_;
51 // MAHIMA: Second queue so main result writes and individual-tracking writes run on separate
52 // threads and can proceed in parallel (different files, no shared state).
53 tbb::concurrent_queue<std::shared_ptr<hgps::EventMessage>> tracking_results_queue_;
54
55 void info_event_handler(std::shared_ptr<hgps::EventMessage> message);
56 void error_event_handler(const std::shared_ptr<hgps::EventMessage> &message);
57 void result_event_handler(std::shared_ptr<hgps::EventMessage> message);
58 // MAHIMA: Routes individual_tracking events to tracking_results_queue_ (not results_queue_).
59 void tracking_event_handler(std::shared_ptr<hgps::EventMessage> message);
60
61 void info_dispatch_thread();
62 void tracking_dispatch_thread();
63};
64} // namespace hgps
Defines the event aggregator interface type.
Definition event_aggregator.h:59
Event message types visitor interface (double dispatcher)
Definition event_visitor.h:11
Defined the event monitor class used for processing Health-GPS event messages.
Definition event_monitor.h:19
void visit(const hgps::RunnerEventMessage &message) override
Visits a hgps::RunnerEventMessage message type.
Definition event_monitor.cpp:66
~EventMonitor() noexcept
Destroys a hgps::EventMonitor instance.
Definition event_monitor.cpp:47
void stop() noexcept
Stops the monitor, no new messages are processed after stop.
Definition event_monitor.cpp:55
Definition individual_id_tracking_writer.h:20
Defines the Health-GPS results message writer interface.
Definition result_writer.h:7
Top-level namespace for Health-GPS Console host application.
Definition command_options.cpp:8
Implements the simulation error event message data type.
Definition error_message.h:7
Definition individual_tracking_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