Add event framework
Introduce the concept of events, where the existing Dbus signal
match event is one of many possible event classes.
Change-Id: I9b0c6ca12daaa109f8ceb537a5fb0cc6b5f7181b
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/events.hpp b/events.hpp
index e2a87e3..30fb24f 100644
--- a/events.hpp
+++ b/events.hpp
@@ -22,6 +22,55 @@
using Filter = holder::CallableHolder<
T, bool, sdbusplus::message::message&, Manager&>;
+/** @struct Event
+ * @brief Event object interface.
+ */
+struct Event
+{
+ enum class Type
+ {
+ DBUS_SIGNAL,
+ };
+
+ virtual ~Event() = default;
+ Event(const Event&) = default;
+ Event& operator=(const Event&) = default;
+ Event(Event&&) = default;
+ Event& operator=(Event&&) = default;
+ explicit Event(Type t) : type(t) {}
+
+ Type type;
+};
+
+using EventBasePtr = std::shared_ptr<Event>;
+
+/** @struct DbusSignal
+ * @brief DBus signal event.
+ *
+ * DBus signal events are an association of a match signature
+ * and filtering function object.
+ */
+struct DbusSignal final :
+ public Event,
+ public std::tuple<const char *, FilterBasePtr>
+{
+ virtual ~DbusSignal() = default;
+ DbusSignal(const DbusSignal&) = default;
+ DbusSignal & operator=(const DbusSignal&) = delete;
+ DbusSignal(DbusSignal&&) = default;
+ DbusSignal& operator=(DbusSignal&&) = default;
+
+ /** @brief Import from signature and filter constructor.
+ *
+ * @param[in] sig - The DBus match signature.
+ * @param[in] filter - A DBus signal match callback filtering function.
+ */
+ DbusSignal(const char *sig, FilterBasePtr filter) :
+ Event(Type::DBUS_SIGNAL),
+ std::tuple<const char *, FilterBasePtr>(
+ sig, std::move(filter)) {}
+};
+
/** @brief make_filter
*
* Adapt a filter function object.