#pragma once #include #include #include "Event.hpp" #include #include class VrEventPublisher; class VrEventSubscriber { public: virtual ~VrEventSubscriber() {}; virtual void recieve_event(VrEventPublisher* publisher, std::unique_ptr event) = 0; void subscribe_to_publisher(VrEventPublisher* publisher, vr::Event::EventType type); void subscribe_to_publisher(VrEventPublisher* publisher, std::vector type); protected: std::vector subscribed_event_types; }; class VrEventPublisher { public: virtual ~VrEventPublisher() {}; virtual void subscribe(VrEventSubscriber *subscriber, vr::Event::EventType type) final; virtual void subscribe(VrEventSubscriber *subscriber, std::vector type) final; virtual void unsubscribe(VrEventSubscriber *s, vr::Event::EventType c) final; private: std::map> subscribers; protected: virtual void notify_subscribers(std::unique_ptr event) final; virtual void dispatch_events() final; virtual void generate_events() = 0; std::list> event_queue; };