summaryrefslogtreecommitdiffstats
path: root/src/pathwatchimpl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pathwatchimpl.hpp')
-rw-r--r--src/pathwatchimpl.hpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/pathwatchimpl.hpp b/src/pathwatchimpl.hpp
new file mode 100644
index 0000000..6be0f50
--- /dev/null
+++ b/src/pathwatchimpl.hpp
@@ -0,0 +1,53 @@
+/**
+ * @file PathWatchimpl.hpp
+ * @brief Add interfaces added watch for the specified path
+ *
+ */
+#pragma once
+
+#include <sdbusplus/message.hpp>
+#include <sdbusplus/bus/match.hpp>
+#include <vector>
+#include "callback.hpp"
+#include "data_types.hpp"
+#include "pathwatch.hpp"
+
+namespace phosphor
+{
+namespace dbus
+{
+namespace monitoring
+{
+
+template <typename DBusInterfaceType> void PathWatch<DBusInterfaceType>::start()
+{
+ if (alreadyRan)
+ {
+ return;
+ }
+ // Watch for new interfaces added on this path.
+ DBusInterfaceType::addMatch(
+ sdbusplus::bus::match::rules::interfacesAdded(objectPath),
+ [this](auto& msg)
+ // *INDENT-OFF*
+ { (this->cb)(Context::SIGNAL, msg); });
+ // *INDENT-ON*
+
+ alreadyRan = true;
+}
+
+template <typename DBusInterfaceType>
+void PathWatch<DBusInterfaceType>::callback(Context ctx)
+{
+ (this->cb)(ctx);
+}
+
+template <typename DBusInterfaceType>
+void PathWatch<DBusInterfaceType>::callback(Context ctx,
+ sdbusplus::message::message& msg)
+{
+ (this->cb)(ctx, msg);
+}
+} // namespace monitoring
+} // namespace dbus
+} // namespace phosphor
OpenPOWER on IntegriCloud