1 /** 2 * @file PathWatch.hpp 3 * @brief Add watch for the object path for interfaces added/removed signal 4 * 5 * In general class users should include pathwatchimpl.hpp instead to avoid 6 * link failures. 7 */ 8 #pragma once 9 10 #include "data_types.hpp" 11 #include "watch.hpp" 12 13 #include <string> 14 15 namespace phosphor 16 { 17 namespace dbus 18 { 19 namespace monitoring 20 { 21 22 class Callback; 23 24 /** @class PathWatch 25 * @brief Watch on object path for interfaceadded/interfaceremoved signals 26 */ 27 template <typename DBusInterfaceType> 28 class PathWatch : public Watch 29 { 30 public: 31 PathWatch() = delete; 32 PathWatch(const PathWatch&) = delete; 33 PathWatch(PathWatch&&) = default; 34 PathWatch& operator=(const PathWatch&) = delete; 35 PathWatch& operator=(PathWatch&&) = default; 36 virtual ~PathWatch() = default; 37 PathWatch(const std::string& path, Callback& callback) : 38 Watch(), objectPath(path), cb(callback), alreadyRan(false) 39 { 40 } 41 42 /** @brief Start the watch. 43 * 44 * Watch start interface implementation for PathWatch. 45 */ 46 void start() override; 47 48 /** @brief Run the watch callback method. 49 * 50 * Watch callback interface implementation for PathWatch. 51 */ 52 void callback(Context ctx) override; 53 54 /** @brief Run the watch callback method. 55 * 56 * Watch callback interface implementation for PathWatch. 57 */ 58 void callback(Context ctx, sdbusplus::message::message& msg) override; 59 60 protected: 61 /** @brief Path of the D-Bus object to watch for. */ 62 const std::string& objectPath; 63 64 /** @brief Optional callback method. */ 65 Callback& cb; 66 67 /** @brief The start method should only be invoked once. */ 68 bool alreadyRan; 69 }; 70 71 } // namespace monitoring 72 } // namespace dbus 73 } // namespace phosphor 74