| /** |
| * @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" |
| |
| #include <string> |
| |
| namespace phosphor |
| { |
| namespace dbus |
| { |
| namespace monitoring |
| { |
| |
| class Callback; |
| |
| /** @class PathWatch |
| * @brief Watch on object path for interfaceadded/interfaceremoved signals |
| */ |
| template <typename DBusInterfaceType> |
| 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 |