PocketPutr/Desktop_Test/event_manager.cpp
2025-12-15 20:45:05 +01:00

35 lines
929 B
C++

#include "event_manager.h"
void EventManager::init() {
xTaskCreatePinnedToCore(dispatch_task, "event_dispatch", 4096, this, 2, &_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);
}
}