Consolix
Loading...
Searching...
No Matches
EventHubComponent.hpp
Go to the documentation of this file.
1#pragma once
2#ifndef _CONSOLIX_EVENT_HUB_COMPONENT_HPP_INCLUDED
3#define _CONSOLIX_EVENT_HUB_COMPONENT_HPP_INCLUDED
4
8
9#if CONSOLIX_USE_EVENT_HUB == 1
10
11#include <cstddef>
12
13#include <event_hub.hpp>
14
15namespace consolix {
16
23 class EventHubComponent :
24 public IAppComponent,
25 public IShutdownable {
26 public:
28 static constexpr std::size_t default_max_tasks_per_pass = 128;
29
31 EventHubComponent() = default;
32
37 EventHubComponent(
38 event_hub::EventBus* event_bus,
39 event_hub::TaskManager* task_manager = nullptr,
40 std::size_t max_tasks_per_pass = default_max_tasks_per_pass) :
41 m_event_bus(event_bus),
42 m_task_manager(task_manager),
43 m_max_tasks_per_pass(max_tasks_per_pass) {
44 }
45
48 void set_event_bus(event_hub::EventBus* event_bus) {
49 m_event_bus = event_bus;
50 }
51
54 void set_task_manager(event_hub::TaskManager* task_manager) {
55 m_task_manager = task_manager;
56 }
57
60 void set_max_tasks_per_pass(std::size_t max_tasks_per_pass) {
61 m_max_tasks_per_pass = max_tasks_per_pass;
62 }
63
66 std::size_t last_work_count() const {
67 return m_last_work_count;
68 }
69
70 protected:
71 bool initialize() override {
72 m_is_init = true;
73 return true;
74 }
75
76 bool is_initialized() const override {
77 return m_is_init;
78 }
79
80 void process() override {
81 std::size_t work_count = 0;
82
83 if (m_event_bus) {
84 work_count += m_event_bus->process();
85 }
86 if (m_task_manager) {
87 work_count += m_task_manager->process(m_max_tasks_per_pass);
88 }
89
90 m_last_work_count = work_count;
91 }
92
93 void shutdown(int /*signal*/) override {
94 if (m_event_bus) {
95 m_event_bus->clear_pending();
96 }
97 if (m_task_manager) {
98 m_task_manager->clear_pending();
99 }
100 }
101
102 private:
103 event_hub::EventBus* m_event_bus{nullptr};
104 event_hub::TaskManager* m_task_manager{nullptr};
105 std::size_t m_max_tasks_per_pass{default_max_tasks_per_pass};
106 std::size_t m_last_work_count{0};
107 bool m_is_init{false};
108 };
109
110} // namespace consolix
111
112#endif // CONSOLIX_USE_EVENT_HUB == 1
113
114#endif // _CONSOLIX_EVENT_HUB_COMPONENT_HPP_INCLUDED
< Utility modules and helpers.