PocketPutr/Desktop_Test/event_manager.cpp
2025-12-15 19:06:44 +01:00

43 lines
992 B
C++

#include "event_manager.h"
void EventManager::init() {
xTaskCreatePinnedToCore(
dispatch_task,
"event_dispatch",
4096,
this,
2, // Higher priority than input
&_dispatcher_task,
0
);
}
void EventManager::publish(const CLICK_EVENT& event) {
xQueueSend(_event_queue, &event, 0);
}
void EventManager::subscribe(IEventListener* listener) {
_listeners.push_back(listener);
}
void EventManager::unsubscribe(IEventListener* listener) {
auto it = std::find(_listeners.begin(), _listeners.end(), listener);
if (it != _listeners.end()) {
_listeners.erase(it);
}
}
void EventManager::dispatch_task(void* pvParameters) {
EventManager* self = static_cast<EventManager*>(pvParameters);
CLICK_EVENT event;
for (;;) {
if (xQueueReceive(self->_event_queue, &event, portMAX_DELAY)) {
// Dispatch to all listeners
for (auto* listener : self->_listeners) {
listener->on_click_event(event);
}
}
vTaskDelay(1);
}
}