47 lines
962 B
C++
Executable File
47 lines
962 B
C++
Executable File
#pragma once
|
|
|
|
#include <hack/patterns/singleton.hpp>
|
|
#include <hack/logger/logger.hpp>
|
|
#include <hack/security/uuid.hpp>
|
|
|
|
#include "event.hpp"
|
|
#include "utils/using.hpp"
|
|
|
|
namespace VE
|
|
{
|
|
struct event_manager : public hack::patterns::singleton<event_manager>
|
|
{
|
|
std::map<std::string, event_fn<event>> m_funcs;
|
|
|
|
template<typename T>
|
|
std::string connect(T* obj, void (T::*method)(event))
|
|
{
|
|
std::string key = hack::security::generate_uuid();
|
|
m_funcs[key] = std::bind(method, obj, std::placeholders::_1);
|
|
return key;
|
|
}
|
|
|
|
void disconnect(std::string key)
|
|
{
|
|
m_funcs.erase(key);
|
|
}
|
|
|
|
void emit(event e)
|
|
{
|
|
try
|
|
{
|
|
for(auto [key, f] : m_funcs) m_funcs[key](e);
|
|
}
|
|
catch(const std::exception& ex)
|
|
{
|
|
hack::error()(ex.what());
|
|
hack::log()("size funcs", m_funcs.size());
|
|
}
|
|
catch(...)
|
|
{
|
|
hack::error()("ooops...");
|
|
}
|
|
}
|
|
};
|
|
}
|