/* * AsyncWebServerHandlerImpl.h * * Created on: 19.12.2015 г. * Author: ficeto */ #ifndef ASYNCWEBSERVERHANDLERIMPL_H_ #define ASYNCWEBSERVERHANDLERIMPL_H_ #include "stddef.h" class AsyncStaticWebHandler: public AsyncWebHandler { private: protected: FS _fs; String _uri; String _path; String _cache_header; bool _isFile; public: AsyncStaticWebHandler(FS& fs, const char* path, const char* uri, const char* cache_header) : _fs(fs), _uri(uri), _path(path), _cache_header(cache_header){ _isFile = _fs.exists(path); } bool canHandle(AsyncWebServerRequest *request); void handleRequest(AsyncWebServerRequest *request); }; class AsyncCallbackWebHandler: public AsyncWebHandler { private: protected: String _uri; WebRequestMethod _method; ArRequestHandlerFunction _onRequest; ArUploadHandlerFunction _onUpload; ArBodyHandlerFunction _onBody; public: AsyncCallbackWebHandler() : _uri(), _method(HTTP_ANY), _onRequest(NULL), _onUpload(NULL), _onBody(NULL){} void setUri(String uri){ _uri = uri; } void setMethod(WebRequestMethod method){ _method = method; } void onRequest(ArRequestHandlerFunction fn){ _onRequest = fn; } void onUpload(ArUploadHandlerFunction fn){ _onUpload = fn; } void onBody(ArBodyHandlerFunction fn){ _onBody = fn; } bool canHandle(AsyncWebServerRequest *request){ if(!_onRequest) return false; if(_method != HTTP_ANY && request->method() != _method) return false; if(_uri.length() > 1 && (_uri != request->url() && !request->url().startsWith(_uri+"/"))) return false; request->addInterestingHeader("ANY"); return true; } void handleRequest(AsyncWebServerRequest *request){ if(_onRequest) _onRequest(request); else request->send(500); } void handleUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){ if(_onUpload) _onUpload(request, filename, index, data, len, final); } void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){ if(_onBody) _onBody(request, data, len, index, total); } }; #endif /* ASYNCWEBSERVERHANDLERIMPL_H_ */