/** * @file PathWatch.hpp * @brief Add watch for the object path for interfaces added/removed signal * * In general class users should include pathwatchimpl.hpp instead to avoid * link failures. */ #pragma once #include "data_types.hpp" #include "watch.hpp" namespace phosphor { namespace dbus { namespace monitoring { class Callback; /** @class PathWatch * @brief Watch on object path for interfaceadded/interfaceremoved signals */ template class PathWatch : public Watch { public: PathWatch() = delete; PathWatch(const PathWatch&) = delete; PathWatch(PathWatch&&) = default; PathWatch& operator=(const PathWatch&) = delete; PathWatch& operator=(PathWatch&&) = default; virtual ~PathWatch() = default; PathWatch(const std::string& path, Callback& callback) : Watch(), objectPath(path), cb(callback), alreadyRan(false) { } /** @brief Start the watch. * * Watch start interface implementation for PathWatch. */ void start() override; /** @brief Run the watch callback method. * * Watch callback interface implementation for PathWatch. */ void callback(Context ctx) override; /** @brief Run the watch callback method. * * Watch callback interface implementation for PathWatch. */ void callback(Context ctx, sdbusplus::message::message& msg) override; protected: /** @brief Path of the D-Bus object to watch for. */ const std::string& objectPath; /** @brief Optional callback method. */ Callback& cb; /** @brief The start method should only be invoked once. */ bool alreadyRan; }; } // namespace monitoring } // namespace dbus } // namespace phosphor