50 using Cob = std::function<void()>;
56 explicit FilePoller(std::chrono::milliseconds pollInterval =
83 std::placeholders::_1,
84 std::placeholders::_2,
101 std::chrono::milliseconds(10000);
105 : yCob(yesCob), nCob(noCob), condition(cond) {}
113 using FileDatas = std::unordered_map<std::string, FileData>;
118 std::chrono::seconds expireTime) {
120 (
time(
nullptr) < fModData.
modTime + expireTime.count());
132 const bool fileStillExists = oldModData.
exists && modData.
exists;
134 const bool fileCreated = !oldModData.
exists && modData.
exists;
135 return (fileStillExists && fileTouched) || fileCreated;
141 void init(std::chrono::milliseconds pollInterval);
std::function< bool(const FileModificationData &, const FileModificationData &)> Condition
virtual FileModificationData getFileModData(const std::string &path) noexcept
FileModificationData(bool fileExists, time_t modificationTime)
static bool inPollerThread()
FilePoller(std::chrono::milliseconds pollInterval=kDefaultPollInterval)
static Condition fileTouchedWithinCond(std::chrono::seconds expireTime)
std::shared_ptr< folly::FunctionScheduler > scheduler_
std::unordered_map< std::string, FileData > FileDatas
static bool fileTouchedCondInternal(const FileModificationData &oldModData, const FileModificationData &modData)
FilePoller & operator=(const FilePoller &other)=delete
FileData(Cob yesCob, Cob noCob, Condition cond)
requires E e noexcept(noexcept(s.error(std::move(e))))
static Condition doAlwaysCond()
static folly::ThreadLocal< bool > polling_
void addFileToTrack(const std::string &fileName, Cob yCob, Cob nCob=nullptr, Condition condition=fileTouchedCondInternal)
void removeFileToTrack(const std::string &fileName)
FileModificationData modData
void initFileData(const std::string &fName, FileData &fData) noexcept
static bool doAlwaysCondInternal(const FileModificationData &, const FileModificationData &)
static Condition fileTouchedCond()
int bind(NetworkSocket s, const sockaddr *name, socklen_t namelen)
static constexpr std::chrono::milliseconds kDefaultPollInterval
std::function< void()> Cob
void init(std::chrono::milliseconds pollInterval)
static bool fileTouchedWithinCondInternal(const FilePoller::FileModificationData &, const FilePoller::FileModificationData &fModData, std::chrono::seconds expireTime)
void checkFiles() noexcept
std::chrono::nanoseconds time()