diff --git a/examples/HTTPMethodsWithArduino/HTTPMethodsWithArduino.ino b/examples/HTTPMethodsWithArduino/HTTPMethodsWithArduino.ino index 97c1879e..a8336816 100644 --- a/examples/HTTPMethodsWithArduino/HTTPMethodsWithArduino.ino +++ b/examples/HTTPMethodsWithArduino/HTTPMethodsWithArduino.ino @@ -101,16 +101,16 @@ void setup() { server.begin(); - WebRequestMethodComposite composite1 = WebRequestMethod::HTTP_GET | WebRequestMethod::HTTP_POST; - WebRequestMethodComposite composite2 = WebRequestMethod::HTTP_GET | WebRequestMethod::HTTP_POST; - WebRequestMethodComposite composite3 = WebRequestMethod::HTTP_HEAD | WebRequestMethod::HTTP_OPTIONS; + WebRequestMethodComposite composite1 = AsyncWebRequestMethod::HTTP_GET | AsyncWebRequestMethod::HTTP_POST; + WebRequestMethodComposite composite2 = AsyncWebRequestMethod::HTTP_GET | AsyncWebRequestMethod::HTTP_POST; + WebRequestMethodComposite composite3 = AsyncWebRequestMethod::HTTP_HEAD | AsyncWebRequestMethod::HTTP_OPTIONS; WebRequestMethodComposite composite4 = composite3; - WebRequestMethodComposite composite5 = WebRequestMethod::HTTP_GET; + WebRequestMethodComposite composite5 = AsyncWebRequestMethod::HTTP_GET; - assert(composite1.matches(WebRequestMethod::HTTP_GET)); - assert(composite1.matches(WebRequestMethod::HTTP_POST)); - assert(!composite1.matches(WebRequestMethod::HTTP_HEAD)); - assert(!composite3.matches(WebRequestMethod::HTTP_GET)); + assert(composite1.matches(AsyncWebRequestMethod::HTTP_GET)); + assert(composite1.matches(AsyncWebRequestMethod::HTTP_POST)); + assert(!composite1.matches(AsyncWebRequestMethod::HTTP_HEAD)); + assert(!composite3.matches(AsyncWebRequestMethod::HTTP_GET)); assert(composite1 == composite2); assert(composite3 == composite4); diff --git a/examples/HTTPMethodsWithESPIDF/HTTPMethodsWithESPIDF.ino b/examples/HTTPMethodsWithESPIDF/HTTPMethodsWithESPIDF.ino index 6ae9b0ad..c2e7cbc0 100644 --- a/examples/HTTPMethodsWithESPIDF/HTTPMethodsWithESPIDF.ino +++ b/examples/HTTPMethodsWithESPIDF/HTTPMethodsWithESPIDF.ino @@ -104,16 +104,16 @@ void setup() { server.begin(); - WebRequestMethodComposite composite1 = WebRequestMethod::HTTP_GET | WebRequestMethod::HTTP_POST; - WebRequestMethodComposite composite2 = WebRequestMethod::HTTP_GET | WebRequestMethod::HTTP_POST; - WebRequestMethodComposite composite3 = WebRequestMethod::HTTP_HEAD | WebRequestMethod::HTTP_OPTIONS; + WebRequestMethodComposite composite1 = AsyncWebRequestMethod::HTTP_GET | AsyncWebRequestMethod::HTTP_POST; + WebRequestMethodComposite composite2 = AsyncWebRequestMethod::HTTP_GET | AsyncWebRequestMethod::HTTP_POST; + WebRequestMethodComposite composite3 = AsyncWebRequestMethod::HTTP_HEAD | AsyncWebRequestMethod::HTTP_OPTIONS; WebRequestMethodComposite composite4 = composite3; - WebRequestMethodComposite composite5 = WebRequestMethod::HTTP_GET; + WebRequestMethodComposite composite5 = AsyncWebRequestMethod::HTTP_GET; - assert(composite1.matches(WebRequestMethod::HTTP_GET)); - assert(composite1.matches(WebRequestMethod::HTTP_POST)); - assert(!composite1.matches(WebRequestMethod::HTTP_HEAD)); - assert(!composite3.matches(WebRequestMethod::HTTP_GET)); + assert(composite1.matches(AsyncWebRequestMethod::HTTP_GET)); + assert(composite1.matches(AsyncWebRequestMethod::HTTP_POST)); + assert(!composite1.matches(AsyncWebRequestMethod::HTTP_HEAD)); + assert(!composite3.matches(AsyncWebRequestMethod::HTTP_GET)); assert(composite1 == composite2); assert(composite3 == composite4); diff --git a/src/AsyncEventSource.cpp b/src/AsyncEventSource.cpp index 789d73c0..60fd9273 100644 --- a/src/AsyncEventSource.cpp +++ b/src/AsyncEventSource.cpp @@ -368,24 +368,27 @@ void AsyncEventSource::_addClient(AsyncEventSourceClient *client) { if (!client) { return; } + + if (_connectcb) { + _connectcb(client); + } + #ifdef ESP32 std::lock_guard lock(_client_queue_lock); #endif + _clients.emplace_back(client); - if (_connectcb) { - _connectcb(client); - } _adjust_inflight_window(); } void AsyncEventSource::_handleDisconnect(AsyncEventSourceClient *client) { -#ifdef ESP32 - std::lock_guard lock(_client_queue_lock); -#endif if (_disconnectcb) { _disconnectcb(client); } +#ifdef ESP32 + std::lock_guard lock(_client_queue_lock); +#endif for (auto i = _clients.begin(); i != _clients.end(); ++i) { if (i->get() == client) { _clients.erase(i); diff --git a/src/AsyncJson.h b/src/AsyncJson.h index e610d189..423e019c 100644 --- a/src/AsyncJson.h +++ b/src/AsyncJson.h @@ -6,6 +6,8 @@ #include #include "ChunkPrint.h" +#include + #if ASYNC_JSON_SUPPORT == 1 #if ARDUINOJSON_VERSION_MAJOR == 6 @@ -104,7 +106,7 @@ class AsyncCallbackJsonWebHandler : public AsyncWebHandler { #endif void setMethod(WebRequestMethodComposite method) { - _method = method; + _method = std::move(method); } void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; diff --git a/src/ESPAsyncWebServer.h b/src/ESPAsyncWebServer.h index c299f145..f7e222d1 100644 --- a/src/ESPAsyncWebServer.h +++ b/src/ESPAsyncWebServer.h @@ -154,19 +154,26 @@ class WebRequestMethodComposite { constexpr WebRequestMethodComposite(uint32_t m) : mask(m){}; public: + // Default constructor: by default, matches nothing + constexpr WebRequestMethodComposite() : mask(0){}; + // Constructor: allows implicit conversion from WebRequestMethod constexpr WebRequestMethodComposite(WebRequestMethod m) : mask(static_cast(m)){}; // Combine composites - constexpr inline WebRequestMethodComposite operator|(WebRequestMethodComposite r) const { + constexpr inline WebRequestMethodComposite operator|(const WebRequestMethodComposite &r) const { return WebRequestMethodComposite(mask | r.mask); }; // == operator for composite - constexpr inline bool operator==(WebRequestMethodComposite r) const { + constexpr inline bool operator==(const WebRequestMethodComposite &r) const { return mask == r.mask; }; + constexpr inline bool operator!=(const WebRequestMethodComposite &r) const { + return mask != r.mask; + }; + // Check for a match constexpr inline bool matches(WebRequestMethod m) const { return mask & static_cast(m); diff --git a/src/WebHandlerImpl.h b/src/WebHandlerImpl.h index 5656ae78..fbff491f 100644 --- a/src/WebHandlerImpl.h +++ b/src/WebHandlerImpl.h @@ -7,6 +7,7 @@ #include #include +#include class AsyncStaticWebHandler : public AsyncWebHandler { using File = fs::File; @@ -65,7 +66,7 @@ class AsyncCallbackWebHandler : public AsyncWebHandler { AsyncCallbackWebHandler() : _uri(), _method(AsyncWebRequestMethod::HTTP_ALL), _onRequest(NULL), _onUpload(NULL), _onBody(NULL), _isRegex(false) {} void setUri(AsyncURIMatcher uri); void setMethod(WebRequestMethodComposite method) { - _method = method; + _method = std::move(method); } void onRequest(ArRequestHandlerFunction fn) { _onRequest = fn; diff --git a/src/WebServer.cpp b/src/WebServer.cpp index 2ab5bcd4..15fa701a 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -158,7 +158,7 @@ AsyncCallbackWebHandler &AsyncWebServer::on( ) { AsyncCallbackWebHandler *handler = new AsyncCallbackWebHandler(); handler->setUri(std::move(uri)); - handler->setMethod(method); + handler->setMethod(std::move(method)); handler->onRequest(onRequest); handler->onUpload(onUpload); handler->onBody(onBody); @@ -169,7 +169,7 @@ AsyncCallbackWebHandler &AsyncWebServer::on( #if ASYNC_JSON_SUPPORT == 1 AsyncCallbackJsonWebHandler &AsyncWebServer::on(AsyncURIMatcher uri, WebRequestMethodComposite method, ArJsonRequestHandlerFunction onBody) { AsyncCallbackJsonWebHandler *handler = new AsyncCallbackJsonWebHandler(std::move(uri), onBody); - handler->setMethod(method); + handler->setMethod(std::move(method)); addHandler(handler); return *handler; }