diff --git a/WiFiManager.cpp b/WiFiManager.cpp index 5a79cbe..2299fa2 100644 --- a/WiFiManager.cpp +++ b/WiFiManager.cpp @@ -453,6 +453,12 @@ void WiFiManager::setupConfigPortal() { DEBUG_WM(DEBUG_DEV,"dns server started with ip: ",WiFi.softAPIP()); dnsServer->start(DNS_PORT, F("*"), WiFi.softAPIP()); + // @todo new callback, webserver started, callback cannot override handlers, but can grab them first + + if ( _webservercallback != NULL) { + _webservercallback(); + } + /* Setup httpd callbacks, web pages: root, wifi config pages, SO captive portal detectors and not found. */ server->on(String(FPSTR(R_root)).c_str(), std::bind(&WiFiManager::handleRoot, this)); server->on(String(FPSTR(R_wifi)).c_str(), std::bind(&WiFiManager::handleWifi, this, true)); @@ -521,15 +527,15 @@ boolean WiFiManager::startConfigPortal(char const *apName, char const *apPasswo startAP(); WiFiSetCountry(); - // init configportal - DEBUG_WM(DEBUG_DEV,F("setupConfigPortal")); - setupConfigPortal(); - // do AP callback if set if ( _apcallback != NULL) { _apcallback(this); } - + + // init configportal + DEBUG_WM(DEBUG_DEV,F("setupConfigPortal")); + setupConfigPortal(); + if(!_configPortalIsBlocking){ DEBUG_WM(DEBUG_VERBOSE,F("Config Portal Running, non blocking/processing")); return result; @@ -2012,6 +2018,17 @@ void WiFiManager::setAPCallback( std::function func ) { _apcallback = func; } +/** + * setWebServerCallback, set a callback after webserver is reset, and before routes are setup + * if we set webserver handlers before wm, they are used and wm is not by esp webserver + * on events cannot be overrided once set, and are not mutiples + * @access public + * @param {[type]} void (*func)(void) + */ +void WiFiManager::setWebServerCallback( std::function func ) { + _webservercallback = func; +} + /** * setSaveConfigCallback, set a save config callback after closing configportal * @note calls only if wifi is saved or changed, or setBreakAfterConfig(true) diff --git a/WiFiManager.h b/WiFiManager.h index 1774d24..c44057d 100644 --- a/WiFiManager.h +++ b/WiFiManager.h @@ -184,8 +184,10 @@ class WiFiManager // SET CALLBACKS - //called when AP mode and config portal is started + //called after AP mode and config portal has started void setAPCallback( std::function func ); + //called after webserver has started + void setWebServerCallback( std::function func ); //called when settings reset have been triggered void setConfigResetCallback( std::function func ); //called when wifi settings have been changed and connection was successful ( or setBreakAfterConfig(true) ) @@ -273,7 +275,6 @@ class WiFiManager // set body class (invert) void setClass(String str); - private: std::unique_ptr dnsServer; #if defined(ESP32) && defined(WM_WEBSERVERSHIM) @@ -284,6 +285,7 @@ class WiFiManager std::unique_ptr server; + private: std::vector _menuIds; std::vector _menuIdsDefault = {"wifi","info","exit"}; @@ -484,6 +486,7 @@ class WiFiManager // callbacks // @todo use cb list (vector) maybe event ids, allow no return value std::function _apcallback; + std::function _webservercallback; std::function _savewificallback; std::function _presavecallback; std::function _saveparamscallback; diff --git a/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino b/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino index 3ded79b..8ceebd8 100644 --- a/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino +++ b/examples/DEV/OnDemandConfigPortal/OnDemandConfigPortal.ino @@ -39,7 +39,6 @@ void saveWifiCallback(){ Serial.println("[CALLBACK] saveCallback fired"); } - //gets called when WiFiManager enters configuration mode void configModeCallback (WiFiManager *myWiFiManager) { Serial.println("[CALLBACK] configModeCallback fired"); @@ -53,6 +52,16 @@ void saveParamCallback(){ Serial.println("[CALLBACK] saveParamCallback fired"); } +void bindServerCallback(){ + wm.server->on("/custom",handleRoute); + // wm.server->on("/info",handleRoute); // can override wm! +} + +void handleRoute(){ + Serial.println("[HTTP] handle route"); + wm.server->send(200, "text/plain", "hello from user code"); +} + void setup() { // put your setup code here, to run once: Serial.begin(115200); @@ -90,6 +99,7 @@ void setup() { // callbacks wm.setAPCallback(configModeCallback); + wm.setWebServerCallback(bindServerCallback); wm.setSaveConfigCallback(saveWifiCallback); wm.setSaveParamsCallback(saveParamCallback);