blob: bc0cb3ac18737f1b4f2456f568f674bcb7f202bd [file] [log] [blame]
Marri Devender Rao0dabe592018-04-12 09:18:43 -05001/**
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
Andrew Geisslerae4c95c2020-05-16 13:58:53 -050013#include <string>
14
Marri Devender Rao0dabe592018-04-12 09:18:43 -050015namespace phosphor
16{
17namespace dbus
18{
19namespace monitoring
20{
21
22class Callback;
23
24/** @class PathWatch
25 * @brief Watch on object path for interfaceadded/interfaceremoved signals
26 */
Patrick Venture3d6d3182018-08-31 09:33:09 -070027template <typename DBusInterfaceType>
28class PathWatch : public Watch
Marri Devender Rao0dabe592018-04-12 09:18:43 -050029{
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)
George Liu3fe976c2022-06-21 09:37:04 +080039 {}
Marri Devender Rao0dabe592018-04-12 09:18:43 -050040
41 /** @brief Start the watch.
42 *
43 * Watch start interface implementation for PathWatch.
44 */
45 void start() override;
46
47 /** @brief Run the watch callback method.
48 *
49 * Watch callback interface implementation for PathWatch.
50 */
51 void callback(Context ctx) override;
52
53 /** @brief Run the watch callback method.
54 *
55 * Watch callback interface implementation for PathWatch.
56 */
57 void callback(Context ctx, sdbusplus::message::message& msg) override;
58
59 protected:
60 /** @brief Path of the D-Bus object to watch for. */
61 const std::string& objectPath;
62
63 /** @brief Optional callback method. */
64 Callback& cb;
65
66 /** @brief The start method should only be invoked once. */
67 bool alreadyRan;
68};
69
70} // namespace monitoring
71} // namespace dbus
72} // namespace phosphor