From 4b0eacaef7b60d42f03f9c3299751e57be2cbad4 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Fri, 27 Dec 2024 16:11:32 -0600 Subject: Hook system PoC --- src/port/hooks/impl/EventSystem.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/port/hooks/impl/EventSystem.cpp (limited to 'src/port/hooks/impl/EventSystem.cpp') diff --git a/src/port/hooks/impl/EventSystem.cpp b/src/port/hooks/impl/EventSystem.cpp new file mode 100644 index 00000000..5aa74bc0 --- /dev/null +++ b/src/port/hooks/impl/EventSystem.cpp @@ -0,0 +1,29 @@ +#include "EventSystem.h" + +EventSystem* EventSystem::Instance = new EventSystem(); + +size_t EventSystem::RegisterListener(EventID id, EventPriority priority, EventCallback callback) { + if (std::find(this->mEventListeners[id].begin(), this->mEventListeners[id].end(), callback) != this->mEventListeners[id].end()) { + throw std::runtime_error("Listener already registered"); + } + + this->mEventListeners[id].push_back(callback); +} + +void EventSystem::CallEvent(EventID id, IEvent* event) { + if (this->mEventListeners[id].empty()) { + return; + } + + for (auto& callback : this->mEventListeners[id]) { + callback(event); + } +} + +extern "C" size_t EventSystem_RegisterListener(EventID id, EventPriority priority, EventCallback callback) { + return EventSystem::Instance->RegisterListener(id, priority, callback); +} + +extern "C" void EventSystem_CallEvent(EventID id, void* event) { + EventSystem::Instance->CallEvent(id, static_cast(event)); +} \ No newline at end of file -- cgit v1.2.3