diff --git a/FlippR-Driver/include/input/EventHandler.h b/FlippR-Driver/include/input/EventHandler.h index a39c9ed..289e319 100644 --- a/FlippR-Driver/include/input/EventHandler.h +++ b/FlippR-Driver/include/input/EventHandler.h @@ -24,12 +24,12 @@ public: explicit EventHandler(std::shared_ptr input_driver) : input_driver(std::move(input_driver)) { - this->input_driver->register_event_handler(this); + this->input_driver->register_event_handler(std::shared_ptr(this)); } virtual ~EventHandler() { - this->input_driver->unregister_event_handler(this); + this->input_driver->unregister_event_handler(std::shared_ptr(this)); }; virtual void handle(flippR_driver::input::Event &event) = 0; diff --git a/FlippR-Driver/include/input/InputDriver.h b/FlippR-Driver/include/input/InputDriver.h index e337d14..067e462 100644 --- a/FlippR-Driver/include/input/InputDriver.h +++ b/FlippR-Driver/include/input/InputDriver.h @@ -25,9 +25,9 @@ class InputDriver { public: virtual ~InputDriver() = default; - virtual void register_event_handler(EventHandler *handler) = 0; + virtual void register_event_handler(std::shared_ptr handler) = 0; - virtual void unregister_event_handler(EventHandler *handler) = 0; + virtual void unregister_event_handler(std::shared_ptr handler) = 0; virtual boost::optional> get_event(std::string name) = 0; }; diff --git a/FlippR-Driver/src/input/EventNotifier.h b/FlippR-Driver/src/input/EventNotifier.h index f9f62ca..4848bfe 100644 --- a/FlippR-Driver/src/input/EventNotifier.h +++ b/FlippR-Driver/src/input/EventNotifier.h @@ -22,8 +22,8 @@ class EventNotifier public: virtual ~EventNotifier() = default; - virtual void register_event_handler(EventHandler* handler) = 0; - virtual void unregister_event_handler(EventHandler* handler) = 0; + virtual void register_event_handler(std::shared_ptr handler) = 0; + virtual void unregister_event_handler(std::shared_ptr handler) = 0; virtual void distribute_event(const Event &event) = 0; }; diff --git a/FlippR-Driver/src/input/detail/EventNotifier.cpp b/FlippR-Driver/src/input/detail/EventNotifier.cpp index fe5515d..5fd7fa4 100644 --- a/FlippR-Driver/src/input/detail/EventNotifier.cpp +++ b/FlippR-Driver/src/input/detail/EventNotifier.cpp @@ -39,14 +39,14 @@ EventNotifier::~EventNotifier() delete this->event_queue; } -void EventNotifier::register_event_handler(EventHandler *handler) +void EventNotifier::register_event_handler(std::shared_ptr handler) { std::lock_guard event_handler_guard(event_handler_mutex); this->event_handlers.insert(handler); CLOG(INFO, INPUT_LOGGER) << "New Eventhandler at adress " << handler << " was registered."; } -void EventNotifier::unregister_event_handler(EventHandler *handler) +void EventNotifier::unregister_event_handler(std::shared_ptr handler) { std::lock_guard event_handler_guard(event_handler_mutex); this->event_handlers.erase(handler); diff --git a/FlippR-Driver/src/input/detail/EventNotifier.h b/FlippR-Driver/src/input/detail/EventNotifier.h index 715cb9d..53beb89 100644 --- a/FlippR-Driver/src/input/detail/EventNotifier.h +++ b/FlippR-Driver/src/input/detail/EventNotifier.h @@ -35,8 +35,8 @@ public: explicit EventNotifier(utility::IBlockingQueue *queue); ~EventNotifier() override; - void register_event_handler(EventHandler *handler) override; - void unregister_event_handler(EventHandler *handler) override; + void register_event_handler(std::shared_ptr handler) override; + void unregister_event_handler(std::shared_ptr handler) override; void distribute_event(const Event &event) override; @@ -45,7 +45,7 @@ private: private: utility::IBlockingQueue *event_queue; - std::set event_handlers; + std::set> event_handlers; bool is_running; std::thread notify_thread; diff --git a/FlippR-Driver/src/input/detail/InputDriver.cpp b/FlippR-Driver/src/input/detail/InputDriver.cpp index fb62c8e..9b72d24 100644 --- a/FlippR-Driver/src/input/detail/InputDriver.cpp +++ b/FlippR-Driver/src/input/detail/InputDriver.cpp @@ -22,12 +22,12 @@ event_notifier(std::move(event_notifier)), detector(std::move(detector)), events CLOG(INFO, INPUT_LOGGER) << "Created InputDriver"; } -void InputDriver::register_event_handler(EventHandler *handler) +void InputDriver::register_event_handler(std::shared_ptr handler) { this->event_notifier->register_event_handler(handler); } -void InputDriver::unregister_event_handler(EventHandler *handler) +void InputDriver::unregister_event_handler(std::shared_ptr handler) { this->event_notifier->unregister_event_handler(handler); } diff --git a/FlippR-Driver/src/input/detail/InputDriver.h b/FlippR-Driver/src/input/detail/InputDriver.h index c83d63e..abd2419 100644 --- a/FlippR-Driver/src/input/detail/InputDriver.h +++ b/FlippR-Driver/src/input/detail/InputDriver.h @@ -27,8 +27,8 @@ class InputDriver : public input::InputDriver public: InputDriver(std::shared_ptr event_notifier, std::unique_ptr detector, std::map> events); - void register_event_handler(EventHandler *handler) override; - void unregister_event_handler(EventHandler *handler) override; + void register_event_handler(std::shared_ptr handler) override; + void unregister_event_handler(std::shared_ptr handler) override; boost::optional> get_event(std::string name) override;