blob: bc0cb3ac18737f1b4f2456f568f674bcb7f202bd [file] [log] [blame]
/**
* @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