19 class DatabasePropertyWatcher final {
27 DatabasePropertyWatcher(Private,
DatabaseState&& databaseState, std::string_view name,
int pollFrequencyMs, std::function<
void(
const T&)>&& callback) : m_databaseState(std::move(databaseState)),
28 m_propertyNameToWatch(name),
29 m_pollFrequencyMs(pollFrequencyMs),
30 m_callback(std::move(callback)) {
32 auto proxyCopy = m_proxyThis;
33 m_timer.action = [
this, proxyCopy]() ->
void {
34 if (!proxyCopy->isValid()) {
39 m_timer.run(m_pollFrequencyMs);
54 ~DatabasePropertyWatcher() noexcept {
61 auto operator=(
const DatabasePropertyWatcher& ) -> DatabasePropertyWatcher =
delete;
66 auto operator=(DatabasePropertyWatcher&& ) noexcept -> DatabasePropertyWatcher = delete;
77 static auto
tryCreate(const
DatabaseState& databaseState, std::string_view propertyName,
int pollFrequencyMs, std::function<
void(const T&)>&& callback) -> std::unique_ptr<DatabasePropertyWatcher> {
78 auto databaseCopyOpt = databaseState.duplicate();
79 if (!databaseCopyOpt) {
82 return std::make_unique<DatabasePropertyWatcher<T>>(Private{}, std::move(*databaseCopyOpt), propertyName, pollFrequencyMs, std::move(callback));
87 auto timerCallback() ->
void {
91 const auto getRes = m_databaseState.
get<T>(m_propertyNameToWatch);
96 const auto hasChanged = m_previousValue != getRes;
97 m_previousValue = *getRes;
104 DatabaseState m_databaseState;
105 std::string m_propertyNameToWatch;
106 int m_pollFrequencyMs;
107 std::function<void(
const T&)> m_callback;
108 std::shared_ptr<utils::Proxy<DatabasePropertyWatcher<T>>> m_proxyThis;
109 utils::Timer m_timer;
110 std::optional<T> m_previousValue{};
static auto tryCreate(const DatabaseState &databaseState, std::string_view propertyName, int pollFrequencyMs, std::function< void(const T &)> &&callback) -> std::unique_ptr< DatabasePropertyWatcher >
Definition mostlyharmless_DatabasePropertyWatcher.h:77