diff options
Diffstat (limited to 'src/looper.hh')
| -rw-r--r-- | src/looper.hh | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/looper.hh b/src/looper.hh index 2f4c672..092dfe5 100644 --- a/src/looper.hh +++ b/src/looper.hh @@ -1,6 +1,7 @@ #ifndef LOOPER_HH #define LOOPER_HH +#include <chrono> #include <cstdint> #include <functional> #include <memory> @@ -15,6 +16,8 @@ constexpr static uint8_t EVENT_READ = 1; constexpr static uint8_t EVENT_WRITE = 2; constexpr static uint8_t EVENT_ERROR = 4; +class Hook; + class Looper { public: virtual ~Looper() = default; @@ -32,12 +35,39 @@ class Looper { virtual bool run(logger::Logger& logger) = 0; virtual void quit() = 0; + virtual void add_hook(Hook* hook) = 0; + virtual void remove_hook(Hook* hook) = 0; + protected: Looper() = default; Looper(Looper const&) = delete; Looper& operator=(Looper const&) = delete; }; +class HookHelper { + public: + virtual ~HookHelper() = default; + + virtual void monitor(int fd, uint8_t events) = 0; + virtual void timeout(std::chrono::milliseconds timeout) = 0; + + protected: + HookHelper() = default; + HookHelper(HookHelper const&) = delete; + HookHelper& operator=(HookHelper const&) = delete; +}; + +class Hook { + public: + virtual ~Hook() = default; + + virtual void before(HookHelper& helper) = 0; + virtual void after() = 0; + + protected: + Hook() = default; +}; + [[nodiscard]] std::unique_ptr<Looper> create(); |
