Move network reconfiguration to main loop to prevent crashes

This commit is contained in:
Thomas Basler 2025-01-24 21:08:38 +01:00
parent e1641131d0
commit 226ed94346
2 changed files with 17 additions and 0 deletions

View File

@ -6,10 +6,14 @@
class WebApiNetworkClass { class WebApiNetworkClass {
public: public:
WebApiNetworkClass();
void init(AsyncWebServer& server, Scheduler& scheduler); void init(AsyncWebServer& server, Scheduler& scheduler);
private: private:
void onNetworkStatus(AsyncWebServerRequest* request); void onNetworkStatus(AsyncWebServerRequest* request);
void onNetworkAdminGet(AsyncWebServerRequest* request); void onNetworkAdminGet(AsyncWebServerRequest* request);
void onNetworkAdminPost(AsyncWebServerRequest* request); void onNetworkAdminPost(AsyncWebServerRequest* request);
Task _applyDataTask;
void applyDataTaskCb();
}; };

View File

@ -10,6 +10,11 @@
#include "helper.h" #include "helper.h"
#include <AsyncJson.h> #include <AsyncJson.h>
WebApiNetworkClass::WebApiNetworkClass()
: _applyDataTask(500 * TASK_MILLISECOND, TASK_ONCE, std::bind(&WebApiNetworkClass::applyDataTaskCb, this))
{
}
void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler) void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler)
{ {
using std::placeholders::_1; using std::placeholders::_1;
@ -17,6 +22,8 @@ void WebApiNetworkClass::init(AsyncWebServer& server, Scheduler& scheduler)
server.on("/api/network/status", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkStatus, this, _1)); server.on("/api/network/status", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkStatus, this, _1));
server.on("/api/network/config", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkAdminGet, this, _1)); server.on("/api/network/config", HTTP_GET, std::bind(&WebApiNetworkClass::onNetworkAdminGet, this, _1));
server.on("/api/network/config", HTTP_POST, std::bind(&WebApiNetworkClass::onNetworkAdminPost, this, _1)); server.on("/api/network/config", HTTP_POST, std::bind(&WebApiNetworkClass::onNetworkAdminPost, this, _1));
scheduler.addTask(_applyDataTask);
} }
void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request) void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request)
@ -204,6 +211,12 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request)
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__); WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);
_applyDataTask.enable();
_applyDataTask.restart();
}
void WebApiNetworkClass::applyDataTaskCb()
{
NetworkSettings.enableAdminMode(); NetworkSettings.enableAdminMode();
NetworkSettings.applyConfig(); NetworkSettings.applyConfig();
} }