#pragma once namespace phosphor { namespace dbus { namespace monitoring { /** @class Watch * @brief Watch interface. * * The start method is invoked by main() on all watches of any type * at application startup, to allow watches to perform custom setup * or initialization. Typical implementations might register dbus * callbacks or perform queries. * * The callback method is invoked by main() on all watches of any * type at application startup, after all watches have performed * their setup. Typical implementations will forward the call * to their associated callback. */ class Watch { public: Watch() = default; Watch(const Watch&) = default; Watch(Watch&&) = default; Watch& operator=(const Watch&) = default; Watch& operator=(Watch&&) = default; virtual ~Watch() = default; /** @brief Start the watch. */ virtual void start() = 0; /** @brief Invoke the callback associated with the watch. */ virtual void callback() = 0; }; } // namespace monitoring } // namespace dbus } // namespace phosphor