Reset all handlers. This allowing to use same server few times (#93)
* Reset all handlers. This allowing to use same server few times during app life. E.g. for WiFi manager when hardware sepups WiFi connection and as HTTP server during hardware life cycle
This commit is contained in:
parent
03c61fab43
commit
3eb639b027
26
README.md
26
README.md
|
@ -807,6 +807,32 @@ server.on("/scan", HTTP_GET, [](AsyncWebServerRequest *request){
|
|||
});
|
||||
```
|
||||
|
||||
### Remove handlers and rewriters
|
||||
|
||||
Server goes through handlers in same order as they were added. You can't simple add handler with same path to override them.
|
||||
To remove handler:
|
||||
```arduino
|
||||
// save callback for particular URL path
|
||||
auto handler = server.on("/some/path", [](AsyncWebServerRequest *request){
|
||||
//do something useful
|
||||
});
|
||||
// when you don't need handler anymore remove it
|
||||
server.removeHandler(&handler);
|
||||
|
||||
// same with rewriters
|
||||
server.removeRewrite(&someRewriter);
|
||||
|
||||
server.onNotFound([](AsyncWebServerRequest *request){
|
||||
request->send(404);
|
||||
});
|
||||
|
||||
// remove server.onNotFound handler
|
||||
server.onNotFound(NULL);
|
||||
|
||||
// remove all writers and handlers, with onNotFound/onFileUpload/onRequestBody
|
||||
server.reset();
|
||||
```
|
||||
|
||||
## Setting up the server
|
||||
```cpp
|
||||
#include "ESPAsyncTCP.h"
|
||||
|
|
|
@ -379,11 +379,13 @@ class AsyncWebServer {
|
|||
#endif
|
||||
|
||||
AsyncWebRewrite& addRewrite(AsyncWebRewrite* rewrite);
|
||||
|
||||
bool removeRewrite(AsyncWebRewrite* rewrite);
|
||||
|
||||
AsyncWebRewrite& rewrite(const char* from, const char* to);
|
||||
|
||||
AsyncWebHandler& addHandler(AsyncWebHandler* handler);
|
||||
|
||||
bool removeHandler(AsyncWebHandler* handler);
|
||||
|
||||
AsyncCallbackWebHandler& on(const char* uri, ArRequestHandlerFunction onRequest);
|
||||
AsyncCallbackWebHandler& on(const char* uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest);
|
||||
AsyncCallbackWebHandler& on(const char* uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest, ArUploadHandlerFunction onUpload);
|
||||
|
@ -395,6 +397,8 @@ class AsyncWebServer {
|
|||
void onFileUpload(ArUploadHandlerFunction fn); //handle file uploads
|
||||
void onRequestBody(ArBodyHandlerFunction fn); //handle posts with plain body content (JSON often transmitted this way as a request)
|
||||
|
||||
void reset(); //remove all writers and handlers, with onNotFound/onFileUpload/onRequestBody
|
||||
|
||||
void _handleDisconnect(AsyncWebServerRequest *request);
|
||||
void _attachHandler(AsyncWebServerRequest *request);
|
||||
void _rewriteRequest(AsyncWebServerRequest *request);
|
||||
|
|
|
@ -40,19 +40,8 @@ AsyncWebServer::AsyncWebServer(uint16_t port):_server(port), _rewrites(0), _hand
|
|||
}
|
||||
|
||||
AsyncWebServer::~AsyncWebServer(){
|
||||
while(_rewrites != NULL){
|
||||
AsyncWebRewrite *r = _rewrites;
|
||||
_rewrites = r->next;
|
||||
delete r;
|
||||
}
|
||||
while(_handlers != NULL){
|
||||
AsyncWebHandler *h = _handlers;
|
||||
_handlers = h->next;
|
||||
delete h;
|
||||
}
|
||||
if (_catchAllHandler != NULL){
|
||||
delete _catchAllHandler;
|
||||
}
|
||||
reset();
|
||||
delete _catchAllHandler;
|
||||
}
|
||||
|
||||
AsyncWebRewrite& AsyncWebServer::addRewrite(AsyncWebRewrite* rewrite){
|
||||
|
@ -66,6 +55,24 @@ AsyncWebRewrite& AsyncWebServer::addRewrite(AsyncWebRewrite* rewrite){
|
|||
return *rewrite;
|
||||
}
|
||||
|
||||
bool AsyncWebServer::removeRewrite(AsyncWebRewrite *rewrite){
|
||||
if(rewrite == _rewrites){
|
||||
_rewrites = _rewrites->next;
|
||||
return true;
|
||||
}
|
||||
AsyncWebRewrite *r = _rewrites;
|
||||
while(r != NULL){
|
||||
if(rewrite == r->next){
|
||||
AsyncWebRewrite *d = r->next;
|
||||
r->next = d->next;
|
||||
delete d;
|
||||
return true;
|
||||
}
|
||||
r = r->next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
AsyncWebRewrite& AsyncWebServer::rewrite(const char* from, const char* to){
|
||||
return addRewrite(new AsyncWebRewrite(from, to));
|
||||
}
|
||||
|
@ -81,6 +88,24 @@ AsyncWebHandler& AsyncWebServer::addHandler(AsyncWebHandler* handler){
|
|||
return *handler;
|
||||
}
|
||||
|
||||
bool AsyncWebServer::removeHandler(AsyncWebHandler *handler){
|
||||
if(handler == _handlers){
|
||||
_handlers = _handlers->next;
|
||||
return true;
|
||||
}
|
||||
AsyncWebHandler *h = _handlers;
|
||||
while(h != NULL){
|
||||
if(handler == h->next){
|
||||
AsyncWebHandler *d = h->next;
|
||||
h->next = d->next;
|
||||
delete d;
|
||||
return true;
|
||||
}
|
||||
h = h->next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void AsyncWebServer::begin(){
|
||||
_server.begin();
|
||||
}
|
||||
|
@ -181,3 +206,26 @@ void AsyncWebServer::onFileUpload(ArUploadHandlerFunction fn){
|
|||
void AsyncWebServer::onRequestBody(ArBodyHandlerFunction fn){
|
||||
((AsyncCallbackWebHandler*)_catchAllHandler)->onBody(fn);
|
||||
}
|
||||
|
||||
void AsyncWebServer::reset(){
|
||||
while(_rewrites != NULL){
|
||||
AsyncWebRewrite *r = _rewrites;
|
||||
_rewrites = r->next;
|
||||
delete r;
|
||||
}
|
||||
_rewrites = NULL;
|
||||
|
||||
while(_handlers != NULL){
|
||||
AsyncWebHandler *h = _handlers;
|
||||
_handlers = h->next;
|
||||
delete h;
|
||||
}
|
||||
_handlers = NULL;
|
||||
|
||||
if (_catchAllHandler != NULL){
|
||||
((AsyncCallbackWebHandler*)_catchAllHandler)->onRequest(NULL);
|
||||
((AsyncCallbackWebHandler*)_catchAllHandler)->onUpload(NULL);
|
||||
((AsyncCallbackWebHandler*)_catchAllHandler)->onBody(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue