blob: 127d453433afa865e222e6927b7cd491cbdb6dd7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <mutex>
#include <unordered_map>
#include "EventQueue.hpp"
#include "LuaRuntime.hpp"
void EventQueue::dispatch_event(Event *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);
}
// TODO: to delete or not to delete
// delete 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);
}
}
|