blob: db81bec3bb497291add6419f1cc45acb07cd2d9a [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
13namespace phosphor
14{
15namespace dbus
16{
17namespace monitoring
18{
19
20class Callback;
21
22/** @class PathWatch
23 * @brief Watch on object path for interfaceadded/interfaceremoved signals
24 */
25template <typename DBusInterfaceType> class PathWatch : public Watch
26{
27 public:
28 PathWatch() = delete;
29 PathWatch(const PathWatch&) = delete;
30 PathWatch(PathWatch&&) = default;
31 PathWatch& operator=(const PathWatch&) = delete;
32 PathWatch& operator=(PathWatch&&) = default;
33 virtual ~PathWatch() = default;
34 PathWatch(const std::string& path, Callback& callback) :
35 Watch(), objectPath(path), cb(callback), alreadyRan(false)
36 {
37 }
38
39 /** @brief Start the watch.
40 *
41 * Watch start interface implementation for PathWatch.
42 */
43 void start() override;
44
45 /** @brief Run the watch callback method.
46 *
47 * Watch callback interface implementation for PathWatch.
48 */
49 void callback(Context ctx) override;
50
51 /** @brief Run the watch callback method.
52 *
53 * Watch callback interface implementation for PathWatch.
54 */
55 void callback(Context ctx, sdbusplus::message::message& msg) override;
56
57 protected:
58 /** @brief Path of the D-Bus object to watch for. */
59 const std::string& objectPath;
60
61 /** @brief Optional callback method. */
62 Callback& cb;
63
64 /** @brief The start method should only be invoked once. */
65 bool alreadyRan;
66};
67
68} // namespace monitoring
69} // namespace dbus
70} // namespace phosphor