|
22 | 22 | */ |
23 | 23 |
|
24 | 24 | #if __has_include("ArduinoJson.h") |
25 | | - |
26 | | - #define ASYNC_MSG_PACK_SUPPORT 1 |
27 | | - |
28 | 25 | #include <ArduinoJson.h> |
| 26 | + #if ARDUINOJSON_VERSION_MAJOR >= 6 |
| 27 | + #define ASYNC_MSG_PACK_SUPPORT 1 |
| 28 | + #else |
| 29 | + #define ASYNC_MSG_PACK_SUPPORT 0 |
| 30 | + #endif // ARDUINOJSON_VERSION_MAJOR >= 6 |
| 31 | +#endif // __has_include("ArduinoJson.h") |
| 32 | + |
| 33 | +#if ASYNC_MSG_PACK_SUPPORT == 1 |
29 | 34 | #include <ESPAsyncWebServer.h> |
30 | 35 |
|
31 | 36 | #include "ChunkPrint.h" |
32 | 37 |
|
| 38 | + #if ARDUINOJSON_VERSION_MAJOR == 6 |
| 39 | + #ifndef DYNAMIC_JSON_DOCUMENT_SIZE |
| 40 | + #define DYNAMIC_JSON_DOCUMENT_SIZE 1024 |
| 41 | + #endif |
| 42 | + #endif |
| 43 | + |
33 | 44 | class AsyncMessagePackResponse : public AsyncAbstractResponse { |
34 | 45 | protected: |
| 46 | + #if ARDUINOJSON_VERSION_MAJOR == 6 |
| 47 | + DynamicJsonDocument _jsonBuffer; |
| 48 | + #else |
35 | 49 | JsonDocument _jsonBuffer; |
| 50 | + #endif |
| 51 | + |
36 | 52 | JsonVariant _root; |
37 | 53 | bool _isValid; |
38 | 54 |
|
39 | 55 | public: |
| 56 | + #if ARDUINOJSON_VERSION_MAJOR == 6 |
| 57 | + AsyncMessagePackResponse(bool isArray = false, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE); |
| 58 | + #else |
40 | 59 | AsyncMessagePackResponse(bool isArray = false); |
41 | | - |
| 60 | + #endif |
42 | 61 | JsonVariant& getRoot() { return _root; } |
43 | 62 | bool _sourceValid() const { return _isValid; } |
44 | 63 | size_t setLength(); |
45 | 64 | size_t getSize() const { return _jsonBuffer.size(); } |
46 | 65 | size_t _fillBuffer(uint8_t* data, size_t len); |
| 66 | + #if ARDUINOJSON_VERSION_MAJOR >= 6 |
| 67 | + bool overflowed() const { return _jsonBuffer.overflowed(); } |
| 68 | + #endif |
47 | 69 | }; |
48 | 70 |
|
49 | | -class AsyncCallbackMessagePackWebHandler : public AsyncWebHandler { |
50 | | - public: |
51 | | - typedef std::function<void(AsyncWebServerRequest* request, JsonVariant& json)> ArJsonRequestHandlerFunction; |
| 71 | +typedef std::function<void(AsyncWebServerRequest* request, JsonVariant& json)> ArMessagePackRequestHandlerFunction; |
52 | 72 |
|
| 73 | +class AsyncCallbackMessagePackWebHandler : public AsyncWebHandler { |
53 | 74 | protected: |
54 | 75 | const String _uri; |
55 | 76 | WebRequestMethodComposite _method; |
56 | | - ArJsonRequestHandlerFunction _onRequest; |
| 77 | + ArMessagePackRequestHandlerFunction _onRequest; |
57 | 78 | size_t _contentLength; |
| 79 | + #if ARDUINOJSON_VERSION_MAJOR == 6 |
| 80 | + const size_t maxJsonBufferSize; |
| 81 | + #endif |
58 | 82 | size_t _maxContentLength; |
59 | 83 |
|
60 | 84 | public: |
61 | | - AsyncCallbackMessagePackWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest = nullptr); |
| 85 | + #if ARDUINOJSON_VERSION_MAJOR == 6 |
| 86 | + AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest = nullptr, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE); |
| 87 | + #else |
| 88 | + AsyncCallbackMessagePackWebHandler(const String& uri, ArMessagePackRequestHandlerFunction onRequest = nullptr); |
| 89 | + #endif |
62 | 90 |
|
63 | 91 | void setMethod(WebRequestMethodComposite method) { _method = method; } |
64 | 92 | void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; } |
65 | | - void onRequest(ArJsonRequestHandlerFunction fn) { _onRequest = fn; } |
| 93 | + void onRequest(ArMessagePackRequestHandlerFunction fn) { _onRequest = fn; } |
| 94 | + |
66 | 95 | virtual bool canHandle(AsyncWebServerRequest* request) override final; |
67 | 96 | virtual void handleRequest(AsyncWebServerRequest* request) override final; |
68 | 97 | virtual void handleUpload(__unused AsyncWebServerRequest* request, __unused const String& filename, __unused size_t index, __unused uint8_t* data, __unused size_t len, __unused bool final) override final {} |
69 | 98 | virtual void handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) override final; |
70 | | - virtual bool isRequestHandlerTrivial() override final { return _onRequest ? false : true; } |
| 99 | + virtual bool isRequestHandlerTrivial() override final { return !_onRequest; } |
71 | 100 | }; |
72 | 101 |
|
73 | | -#else // __has_include("ArduinoJson.h") |
74 | | - #define ASYNC_MSG_PACK_SUPPORT 0 |
75 | | -#endif // __has_include("ArduinoJson.h") |
| 102 | +#endif // ASYNC_MSG_PACK_SUPPORT == 1 |
0 commit comments