1*ca8c7e98SJagpal Singh Gill #pragma once 2*ca8c7e98SJagpal Singh Gill 3*ca8c7e98SJagpal Singh Gill #include <sdbusplus/async.hpp> 4*ca8c7e98SJagpal Singh Gill 5*ca8c7e98SJagpal Singh Gill #include <cerrno> 6*ca8c7e98SJagpal Singh Gill #include <cstring> 7*ca8c7e98SJagpal Singh Gill #include <functional> 8*ca8c7e98SJagpal Singh Gill #include <memory> 9*ca8c7e98SJagpal Singh Gill #include <string> 10*ca8c7e98SJagpal Singh Gill 11*ca8c7e98SJagpal Singh Gill namespace notify_watch 12*ca8c7e98SJagpal Singh Gill { 13*ca8c7e98SJagpal Singh Gill 14*ca8c7e98SJagpal Singh Gill class NotifyWatch 15*ca8c7e98SJagpal Singh Gill { 16*ca8c7e98SJagpal Singh Gill public: 17*ca8c7e98SJagpal Singh Gill using Callback_t = std::function<sdbusplus::async::task<>(std::string)>; 18*ca8c7e98SJagpal Singh Gill 19*ca8c7e98SJagpal Singh Gill NotifyWatch() = delete; 20*ca8c7e98SJagpal Singh Gill explicit NotifyWatch(sdbusplus::async::context& ctx, const std::string& dir, 21*ca8c7e98SJagpal Singh Gill Callback_t callback); 22*ca8c7e98SJagpal Singh Gill ~NotifyWatch(); 23*ca8c7e98SJagpal Singh Gill 24*ca8c7e98SJagpal Singh Gill /** @brief Asynchronously watch and notify for any changes to dir */ 25*ca8c7e98SJagpal Singh Gill auto readNotifyAsync() -> sdbusplus::async::task<>; 26*ca8c7e98SJagpal Singh Gill 27*ca8c7e98SJagpal Singh Gill private: 28*ca8c7e98SJagpal Singh Gill sdbusplus::async::context& ctx; 29*ca8c7e98SJagpal Singh Gill Callback_t callback; 30*ca8c7e98SJagpal Singh Gill int wd = -1; 31*ca8c7e98SJagpal Singh Gill int fd = -1; 32*ca8c7e98SJagpal Singh Gill std::unique_ptr<sdbusplus::async::fdio> fdioInstance; 33*ca8c7e98SJagpal Singh Gill }; 34*ca8c7e98SJagpal Singh Gill 35*ca8c7e98SJagpal Singh Gill } // namespace notify_watch 36