diff --git a/lib/framework/APSettingsService.cpp b/lib/framework/APSettingsService.cpp index 98ceb58..fa71071 100644 --- a/lib/framework/APSettingsService.cpp +++ b/lib/framework/APSettingsService.cpp @@ -1,11 +1,14 @@ #include -APSettingsService::APSettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager) : AdminSettingsService(server, fs, securityManager, AP_SETTINGS_SERVICE_PATH, AP_SETTINGS_FILE) { - onConfigUpdated(); -} +APSettingsService::APSettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager) : AdminSettingsService(server, fs, securityManager, AP_SETTINGS_SERVICE_PATH, AP_SETTINGS_FILE) {} APSettingsService::~APSettingsService() {} +void APSettingsService::begin() { + SettingsService::begin(); + onConfigUpdated(); +} + void APSettingsService::loop() { unsigned long currentMillis = millis(); unsigned long manageElapsed = (unsigned long)(currentMillis - _lastManaged); @@ -80,7 +83,4 @@ void APSettingsService::writeToJsonObject(JsonObject& root) { void APSettingsService::onConfigUpdated() { _lastManaged = millis() - MANAGE_NETWORK_DELAY; - - // stop softAP - forces reconfiguration in loop() - stopAP(); } \ No newline at end of file diff --git a/lib/framework/APSettingsService.h b/lib/framework/APSettingsService.h index 0ff46fb..d18d3d2 100644 --- a/lib/framework/APSettingsService.h +++ b/lib/framework/APSettingsService.h @@ -26,6 +26,7 @@ class APSettingsService : public AdminSettingsService { APSettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager); ~APSettingsService(); + void begin(); void loop(); protected: @@ -49,7 +50,7 @@ class APSettingsService : public AdminSettingsService { void manageAP(); void startAP(); - void stopAP(); + void stopAP() ; void handleDNS(); }; diff --git a/lib/framework/AuthenticationService.cpp b/lib/framework/AuthenticationService.cpp index 9ae675c..95f5323 100644 --- a/lib/framework/AuthenticationService.cpp +++ b/lib/framework/AuthenticationService.cpp @@ -1,6 +1,6 @@ #include -AuthenticationService::AuthenticationService(AsyncWebServer* server, SecurityManager* securityManager) { +AuthenticationService::AuthenticationService(AsyncWebServer* server, SecurityManager* securityManager) : _securityManager(securityManager) { server->on(VERIFY_AUTHORIZATION_PATH, HTTP_GET, std::bind(&AuthenticationService::verifyAuthorization, this, std::placeholders::_1)); _signInHandler.setUri(SIGN_IN_PATH); diff --git a/lib/framework/ESP8266React.cpp b/lib/framework/ESP8266React.cpp index ff43a37..0087cab 100644 --- a/lib/framework/ESP8266React.cpp +++ b/lib/framework/ESP8266React.cpp @@ -39,6 +39,14 @@ ESP8266React::ESP8266React(AsyncWebServer* server, FS* fs): #endif } +void ESP8266React::begin() { + _securitySettingsService.begin(); + _wifiSettingsService.begin(); + _apSettingsService.begin(); + _ntpSettingsService.begin(); + _otaSettingsService.begin(); +} + void ESP8266React::loop() { _wifiSettingsService.loop(); _apSettingsService.loop(); diff --git a/lib/framework/ESP8266React.h b/lib/framework/ESP8266React.h index 1f1ae42..d71ca31 100644 --- a/lib/framework/ESP8266React.h +++ b/lib/framework/ESP8266React.h @@ -30,7 +30,8 @@ class ESP8266React { public: ESP8266React(AsyncWebServer* server, FS* fs); - + + void begin(); void loop(); SecurityManager* getSecurityManager(){ diff --git a/lib/framework/SettingsService.h b/lib/framework/SettingsService.h index b0317f7..ab16e10 100644 --- a/lib/framework/SettingsService.h +++ b/lib/framework/SettingsService.h @@ -31,13 +31,15 @@ class SettingsService : public SettingsPersistence { _updateHandler.setMaxContentLength(MAX_SETTINGS_SIZE); _updateHandler.onRequest(std::bind(&SettingsService::updateConfig, this, std::placeholders::_1, std::placeholders::_2)); server->addHandler(&_updateHandler); - - // read the initial data from the file system - readFromFS(); } virtual ~SettingsService() {} + void begin() { + // read the initial data from the file system + readFromFS(); + } + protected: char const* _servicePath; AsyncJsonWebHandler _updateHandler; diff --git a/lib/framework/WiFiSettingsService.cpp b/lib/framework/WiFiSettingsService.cpp index b8e54a9..49f3943 100644 --- a/lib/framework/WiFiSettingsService.cpp +++ b/lib/framework/WiFiSettingsService.cpp @@ -5,9 +5,6 @@ WiFiSettingsService::WiFiSettingsService(AsyncWebServer* server, FS* fs, Securit WiFi.persistent(false); WiFi.setAutoReconnect(false); - // Force WiFi config to be applied when loop() called - reconfigureWiFiConnection(); - #if defined(ESP8266) _onStationModeDisconnectedHandler = WiFi.onStationModeDisconnected(std::bind(&WiFiSettingsService::onStationModeDisconnected, this, std::placeholders::_1)); #elif defined(ESP_PLATFORM) @@ -20,6 +17,11 @@ WiFiSettingsService::WiFiSettingsService(AsyncWebServer* server, FS* fs, Securit WiFiSettingsService::~WiFiSettingsService() {} +void WiFiSettingsService::begin() { + SettingsService::begin(); + reconfigureWiFiConnection(); +} + void WiFiSettingsService::readFromJsonObject(JsonObject& root){ _ssid = root["ssid"] | ""; _password = root["password"] | ""; diff --git a/lib/framework/WiFiSettingsService.h b/lib/framework/WiFiSettingsService.h index e5e6c7e..149325a 100644 --- a/lib/framework/WiFiSettingsService.h +++ b/lib/framework/WiFiSettingsService.h @@ -15,6 +15,7 @@ class WiFiSettingsService : public AdminSettingsService { WiFiSettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager); ~WiFiSettingsService(); + void begin(); void loop(); protected: diff --git a/src/main.cpp b/src/main.cpp index 0447458..af7effb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,21 +5,27 @@ #define SERIAL_BAUD_RATE 115200 AsyncWebServer server(80); -ESP8266React framework(&server, &SPIFFS); -DemoProject demoProject = DemoProject(&server, &SPIFFS, framework.getSecurityManager()); +ESP8266React esp8266React(&server, &SPIFFS); +DemoProject demoProject = DemoProject(&server, &SPIFFS, esp8266React.getSecurityManager()); void setup() { // start serial and filesystem Serial.begin(SERIAL_BAUD_RATE); + + // start the file system (must be done before starting the framework) SPIFFS.begin(); - + + // start the framework and demo project + esp8266React.begin(); + demoProject.begin(); + // start the server server.begin(); } void loop() { // run the framework's loop function - framework.loop(); + esp8266React.loop(); // run the demo project's loop function demoProject.loop();