diff --git a/esp32/lib/ESP32-sveltekit/StatefulService.h b/esp32/lib/ESP32-sveltekit/StatefulService.h index dab249b..7fc665f 100644 --- a/esp32/lib/ESP32-sveltekit/StatefulService.h +++ b/esp32/lib/ESP32-sveltekit/StatefulService.h @@ -23,8 +23,7 @@ #include #include -enum class StateUpdateResult -{ +enum class StateUpdateResult { CHANGED = 0, // The update changed the state and propagation should take place if required UNCHANGED, // The state was unchanged, propagation should not take place ERROR // There was a problem updating the state, propagation should not take place @@ -41,37 +40,33 @@ typedef size_t hook_handler_id_t; typedef std::function StateUpdateCallback; typedef std::function StateHookCallback; -typedef struct StateUpdateHandlerInfo -{ +typedef struct StateUpdateHandlerInfo { static update_handler_id_t currentUpdatedHandlerId; update_handler_id_t _id; StateUpdateCallback _cb; bool _allowRemove; - StateUpdateHandlerInfo(StateUpdateCallback cb, bool allowRemove) : _id(++currentUpdatedHandlerId), _cb(cb), _allowRemove(allowRemove){}; + StateUpdateHandlerInfo(StateUpdateCallback cb, bool allowRemove) + : _id(++currentUpdatedHandlerId), _cb(cb), _allowRemove(allowRemove) {}; } StateUpdateHandlerInfo_t; -typedef struct StateHookHandlerInfo -{ +typedef struct StateHookHandlerInfo { static hook_handler_id_t currentHookHandlerId; hook_handler_id_t _id; StateHookCallback _cb; bool _allowRemove; - StateHookHandlerInfo(StateHookCallback cb, bool allowRemove) : _id(++currentHookHandlerId), _cb(cb), _allowRemove(allowRemove){}; + StateHookHandlerInfo(StateHookCallback cb, bool allowRemove) + : _id(++currentHookHandlerId), _cb(cb), _allowRemove(allowRemove) {}; } StateHookHandlerInfo_t; template -class StatefulService -{ -public: +class StatefulService { + public: template - StatefulService(Args &&...args) : _state(std::forward(args)...), _accessMutex(xSemaphoreCreateRecursiveMutex()) - { - } + StatefulService(Args &&...args) + : _state(std::forward(args)...), _accessMutex(xSemaphoreCreateRecursiveMutex()) {} - update_handler_id_t addUpdateHandler(StateUpdateCallback cb, bool allowRemove = true) - { - if (!cb) - { + update_handler_id_t addUpdateHandler(StateUpdateCallback cb, bool allowRemove = true) { + if (!cb) { return 0; } StateUpdateHandlerInfo_t updateHandler(cb, allowRemove); @@ -79,25 +74,18 @@ public: return updateHandler._id; } - void removeUpdateHandler(update_handler_id_t id) - { - for (auto i = _updateHandlers.begin(); i != _updateHandlers.end();) - { - if ((*i)._allowRemove && (*i)._id == id) - { + void removeUpdateHandler(update_handler_id_t id) { + for (auto i = _updateHandlers.begin(); i != _updateHandlers.end();) { + if ((*i)._allowRemove && (*i)._id == id) { i = _updateHandlers.erase(i); - } - else - { + } else { ++i; } } } - hook_handler_id_t addHookHandler(StateHookCallback cb, bool allowRemove = true) - { - if (!cb) - { + hook_handler_id_t addHookHandler(StateHookCallback cb, bool allowRemove = true) { + if (!cb) { return 0; } StateHookHandlerInfo_t hookHandler(cb, allowRemove); @@ -105,107 +93,84 @@ public: return hookHandler._id; } - void removeHookHandler(hook_handler_id_t id) - { - for (auto i = _hookHandlers.begin(); i != _hookHandlers.end();) - { - if ((*i)._allowRemove && (*i)._id == id) - { + void removeHookHandler(hook_handler_id_t id) { + for (auto i = _hookHandlers.begin(); i != _hookHandlers.end();) { + if ((*i)._allowRemove && (*i)._id == id) { i = _hookHandlers.erase(i); - } - else - { + } else { ++i; } } } - StateUpdateResult update(std::function stateUpdater, const String &originId) - { + StateUpdateResult update(std::function stateUpdater, const String &originId) { beginTransaction(); StateUpdateResult result = stateUpdater(_state); endTransaction(); callHookHandlers(originId, result); - if (result == StateUpdateResult::CHANGED) - { + if (result == StateUpdateResult::CHANGED) { callUpdateHandlers(originId); } return result; } - StateUpdateResult updateWithoutPropagation(std::function stateUpdater) - { + StateUpdateResult updateWithoutPropagation(std::function stateUpdater) { beginTransaction(); StateUpdateResult result = stateUpdater(_state); endTransaction(); return result; } - StateUpdateResult update(JsonObject &jsonObject, JsonStateUpdater stateUpdater, const String &originId) - { + StateUpdateResult update(JsonObject &jsonObject, JsonStateUpdater stateUpdater, const String &originId) { beginTransaction(); StateUpdateResult result = stateUpdater(jsonObject, _state); endTransaction(); callHookHandlers(originId, result); - if (result == StateUpdateResult::CHANGED) - { + if (result == StateUpdateResult::CHANGED) { callUpdateHandlers(originId); } return result; } - StateUpdateResult updateWithoutPropagation(JsonObject &jsonObject, JsonStateUpdater stateUpdater) - { + StateUpdateResult updateWithoutPropagation(JsonObject &jsonObject, JsonStateUpdater stateUpdater) { beginTransaction(); StateUpdateResult result = stateUpdater(jsonObject, _state); endTransaction(); return result; } - void read(std::function stateReader) - { + void read(std::function stateReader) { beginTransaction(); stateReader(_state); endTransaction(); } - void read(JsonObject &jsonObject, JsonStateReader stateReader) - { + void read(JsonObject &jsonObject, JsonStateReader stateReader) { beginTransaction(); stateReader(_state, jsonObject); endTransaction(); } - void callUpdateHandlers(const String &originId) - { - for (const StateUpdateHandlerInfo_t &updateHandler : _updateHandlers) - { + void callUpdateHandlers(const String &originId) { + for (const StateUpdateHandlerInfo_t &updateHandler : _updateHandlers) { updateHandler._cb(originId); } } - void callHookHandlers(const String &originId, StateUpdateResult &result) - { - for (const StateHookHandlerInfo_t &hookHandler : _hookHandlers) - { + void callHookHandlers(const String &originId, StateUpdateResult &result) { + for (const StateHookHandlerInfo_t &hookHandler : _hookHandlers) { hookHandler._cb(originId, result); } } -protected: + protected: T _state; - inline void beginTransaction() - { - xSemaphoreTakeRecursive(_accessMutex, portMAX_DELAY); - } + inline void beginTransaction() { xSemaphoreTakeRecursive(_accessMutex, portMAX_DELAY); } - inline void endTransaction() - { - xSemaphoreGiveRecursive(_accessMutex); - } + inline void endTransaction() { xSemaphoreGiveRecursive(_accessMutex); } -private: + private: SemaphoreHandle_t _accessMutex; std::list _updateHandlers; std::list _hookHandlers;