aboutsummaryrefslogtreecommitdiff
path: root/src/EventQueue.cpp
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);
  }
}