add event system and use it to propagate to print traces
This commit is contained in:
80
src/lib/eventsystem/EventHandler.h
Normal file
80
src/lib/eventsystem/EventHandler.h
Normal file
@@ -0,0 +1,80 @@
|
||||
#ifndef EVENT_HANDLER_H
|
||||
#define EVENT_HANDLER_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "EventHandlerBase.h"
|
||||
#include "EventManager.h"
|
||||
|
||||
template <typename T>
|
||||
class EventHandler: public EventHandlerBase
|
||||
{
|
||||
public:
|
||||
void registerForEvent()
|
||||
{
|
||||
EventManager::getInstance()->registerEventHandler(this);
|
||||
}
|
||||
|
||||
void unregisterForEvent()
|
||||
{
|
||||
EventManager::getInstance()->unregisterEventHandler(this);
|
||||
}
|
||||
|
||||
void handleBaseEvent(std::shared_ptr<const Event> event) override
|
||||
{
|
||||
std::shared_ptr<const T> specificEvent = std::dynamic_pointer_cast<const T>(event);
|
||||
if (specificEvent)
|
||||
{
|
||||
handleEvent(specificEvent);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
virtual void handleEvent(std::shared_ptr<const T> event) = 0;
|
||||
};
|
||||
|
||||
|
||||
template <typename... Ts> class CombinedEventHandlerHelper
|
||||
{
|
||||
protected:
|
||||
void registerForEventsHelper() {}
|
||||
void unregisterForEventsHelper() {}
|
||||
};
|
||||
|
||||
|
||||
template <typename T, typename... Ts>
|
||||
class CombinedEventHandlerHelper<T, Ts...>
|
||||
: public EventHandler<T>
|
||||
, public CombinedEventHandlerHelper<Ts...>
|
||||
{
|
||||
protected:
|
||||
void registerForEventsHelper()
|
||||
{
|
||||
EventHandler<T>::registerForEvent();
|
||||
CombinedEventHandlerHelper<Ts...>::registerForEventsHelper();
|
||||
}
|
||||
|
||||
void unregisterForEventsHelper()
|
||||
{
|
||||
EventHandler<T>::unregisterForEvent();
|
||||
CombinedEventHandlerHelper<Ts...>::unregisterForEventsHelper();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template <typename... Ts>
|
||||
class CombinedEventHandler: public CombinedEventHandlerHelper<Ts...>
|
||||
{
|
||||
protected:
|
||||
void registerForEvents()
|
||||
{
|
||||
CombinedEventHandlerHelper<Ts...>::registerForEventsHelper();
|
||||
}
|
||||
|
||||
void unregisterForEvents()
|
||||
{
|
||||
CombinedEventHandlerHelper<Ts...>::unregisterForEventsHelper();
|
||||
}
|
||||
};
|
||||
|
||||
#endif // EVENT_HANDLER_H
|
||||
Reference in New Issue
Block a user