diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-04-05 16:20:05 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-04-05 16:20:05 +0530 |
| commit | 09cdcd15b31469c839831cad534fec9896999b60 (patch) | |
| tree | 4aea664837807d06b2056c83191143fb9a8f3d54 /src/EventQueue.cpp | |
| parent | c4413f3cca0a0750af9881276162b70f3489b499 (diff) | |
| download | null-browser-09cdcd15b31469c839831cad534fec9896999b60.tar.gz null-browser-09cdcd15b31469c839831cad534fec9896999b60.zip | |
Refactor event queue out of router
Diffstat (limited to 'src/EventQueue.cpp')
| -rw-r--r-- | src/EventQueue.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/EventQueue.cpp b/src/EventQueue.cpp new file mode 100644 index 0000000..eebda76 --- /dev/null +++ b/src/EventQueue.cpp @@ -0,0 +1,31 @@ +#include "EventQueue.hpp" +#include "LuaRuntime.hpp" + +void EventQueue::dispatch_event(BrowserEvent *event) { + auto &runtime = LuaRuntime::instance(); + + runtime.queue_task([this, event]() { + std::unordered_map<QString, std::vector<EventHandlerRequest>> event_map; + { + const std::lock_guard<std::mutex> lock(events_mutex); + event_map = events; + } + + if (!event_map.contains(event->kind)) + return; + + for (auto &event_handler : event_map.at(event->kind)) { + // TODO: Pattern filter + event_handler.handler(event); + } + }); +} + +void EventQueue::register_event(const EventHandlerRequest &event) { + const std::lock_guard<std::mutex> lock(events_mutex); + for (const auto &event_name : event.event_names) { + if (!events.contains(event_name)) + events.insert({event_name, {}}); + events.at(event_name).emplace_back(event); + } +} |
