mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
optimize so easier to port to IDF later
This commit is contained in:
@@ -13,76 +13,47 @@
|
|||||||
using namespace std::placeholders; // for `_1` etc
|
using namespace std::placeholders; // for `_1` etc
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class HttpGetEndpoint {
|
class HttpEndpoint {
|
||||||
public:
|
|
||||||
HttpGetEndpoint(JsonStateReader<T> stateReader,
|
|
||||||
StatefulService<T> * statefulService,
|
|
||||||
AsyncWebServer * server,
|
|
||||||
const String & servicePath,
|
|
||||||
SecurityManager * securityManager,
|
|
||||||
AuthenticationPredicate authenticationPredicate = AuthenticationPredicates::IS_ADMIN)
|
|
||||||
: _stateReader(stateReader)
|
|
||||||
, _statefulService(statefulService) {
|
|
||||||
server->on(servicePath.c_str(), HTTP_GET, securityManager->wrapRequest(std::bind(&HttpGetEndpoint::fetchSettings, this, _1), authenticationPredicate));
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpGetEndpoint(JsonStateReader<T> stateReader, StatefulService<T> * statefulService, AsyncWebServer * server, const String & servicePath)
|
|
||||||
: _stateReader(stateReader)
|
|
||||||
, _statefulService(statefulService) {
|
|
||||||
server->on(servicePath.c_str(), HTTP_GET, std::bind(&HttpGetEndpoint::fetchSettings, this, _1));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
JsonStateReader<T> _stateReader;
|
|
||||||
StatefulService<T> * _statefulService;
|
|
||||||
|
|
||||||
void fetchSettings(AsyncWebServerRequest * request) {
|
|
||||||
AsyncJsonResponse * response = new AsyncJsonResponse(false);
|
|
||||||
JsonObject jsonObject = response->getRoot().to<JsonObject>();
|
|
||||||
_statefulService->read(jsonObject, _stateReader);
|
|
||||||
|
|
||||||
response->setLength();
|
|
||||||
request->send(response);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
class HttpPostEndpoint {
|
|
||||||
public:
|
|
||||||
HttpPostEndpoint(JsonStateReader<T> stateReader,
|
|
||||||
JsonStateUpdater<T> stateUpdater,
|
|
||||||
StatefulService<T> * statefulService,
|
|
||||||
AsyncWebServer * server,
|
|
||||||
const String & servicePath,
|
|
||||||
SecurityManager * securityManager,
|
|
||||||
AuthenticationPredicate authenticationPredicate = AuthenticationPredicates::IS_ADMIN)
|
|
||||||
: _stateReader(stateReader)
|
|
||||||
, _stateUpdater(stateUpdater)
|
|
||||||
, _statefulService(statefulService)
|
|
||||||
, _updateHandler(servicePath, securityManager->wrapCallback(std::bind(&HttpPostEndpoint::updateSettings, this, _1, _2), authenticationPredicate)) {
|
|
||||||
_updateHandler.setMethod(HTTP_POST);
|
|
||||||
server->addHandler(&_updateHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpPostEndpoint(JsonStateReader<T> stateReader,
|
|
||||||
JsonStateUpdater<T> stateUpdater,
|
|
||||||
StatefulService<T> * statefulService,
|
|
||||||
AsyncWebServer * server,
|
|
||||||
const String & servicePath)
|
|
||||||
: _stateReader(stateReader)
|
|
||||||
, _stateUpdater(stateUpdater)
|
|
||||||
, _statefulService(statefulService)
|
|
||||||
, _updateHandler(servicePath, std::bind(&HttpPostEndpoint::updateSettings, this, _1, _2)) {
|
|
||||||
_updateHandler.setMethod(HTTP_POST);
|
|
||||||
server->addHandler(&_updateHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
JsonStateReader<T> _stateReader;
|
JsonStateReader<T> _stateReader;
|
||||||
JsonStateUpdater<T> _stateUpdater;
|
JsonStateUpdater<T> _stateUpdater;
|
||||||
StatefulService<T> * _statefulService;
|
StatefulService<T> * _statefulService;
|
||||||
AsyncCallbackJsonWebHandler _updateHandler;
|
|
||||||
|
|
||||||
|
AsyncCallbackWebHandler * GEThandler;
|
||||||
|
AsyncCallbackJsonWebHandler * POSThandler;
|
||||||
|
|
||||||
|
public:
|
||||||
|
HttpEndpoint(JsonStateReader<T> stateReader,
|
||||||
|
JsonStateUpdater<T> stateUpdater,
|
||||||
|
StatefulService<T> * statefulService,
|
||||||
|
AsyncWebServer * server,
|
||||||
|
const String & servicePath,
|
||||||
|
SecurityManager * securityManager,
|
||||||
|
AuthenticationPredicate authenticationPredicate = AuthenticationPredicates::IS_ADMIN)
|
||||||
|
: _stateReader(stateReader)
|
||||||
|
, _stateUpdater(stateUpdater)
|
||||||
|
, _statefulService(statefulService) {
|
||||||
|
// Create the GET and POST endpoints
|
||||||
|
// We can't use HTTP_ANY and process one a single endpoint due to the way the ESPAsyncWebServer library works
|
||||||
|
// Could also use server->on() but this is more efficient
|
||||||
|
|
||||||
|
// create the GET
|
||||||
|
GEThandler = new AsyncCallbackWebHandler();
|
||||||
|
GEThandler->setUri(servicePath);
|
||||||
|
GEThandler->setMethod(HTTP_GET);
|
||||||
|
GEThandler->onRequest(securityManager->wrapRequest(std::bind(&HttpEndpoint::fetchSettings, this, _1), authenticationPredicate));
|
||||||
|
server->addHandler(GEThandler);
|
||||||
|
|
||||||
|
// create the POST
|
||||||
|
POSThandler =
|
||||||
|
new AsyncCallbackJsonWebHandler(servicePath,
|
||||||
|
securityManager->wrapCallback(std::bind(&HttpEndpoint::updateSettings, this, _1, _2), authenticationPredicate));
|
||||||
|
POSThandler->setMethod(HTTP_POST);
|
||||||
|
server->addHandler(POSThandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// for POST
|
||||||
void updateSettings(AsyncWebServerRequest * request, JsonVariant json) {
|
void updateSettings(AsyncWebServerRequest * request, JsonVariant json) {
|
||||||
if (!json.is<JsonObject>()) {
|
if (!json.is<JsonObject>()) {
|
||||||
request->send(400);
|
request->send(400);
|
||||||
@@ -105,29 +76,15 @@ class HttpPostEndpoint {
|
|||||||
response->setLength();
|
response->setLength();
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
// for GET
|
||||||
class HttpEndpoint : public HttpGetEndpoint<T>, public HttpPostEndpoint<T> {
|
void fetchSettings(AsyncWebServerRequest * request) {
|
||||||
public:
|
AsyncJsonResponse * response = new AsyncJsonResponse(false);
|
||||||
HttpEndpoint(JsonStateReader<T> stateReader,
|
JsonObject jsonObject = response->getRoot().to<JsonObject>();
|
||||||
JsonStateUpdater<T> stateUpdater,
|
_statefulService->read(jsonObject, _stateReader);
|
||||||
StatefulService<T> * statefulService,
|
|
||||||
AsyncWebServer * server,
|
|
||||||
const String & servicePath,
|
|
||||||
SecurityManager * securityManager,
|
|
||||||
AuthenticationPredicate authenticationPredicate = AuthenticationPredicates::IS_ADMIN)
|
|
||||||
: HttpGetEndpoint<T>(stateReader, statefulService, server, servicePath, securityManager, authenticationPredicate)
|
|
||||||
, HttpPostEndpoint<T>(stateReader, stateUpdater, statefulService, server, servicePath, securityManager, authenticationPredicate) {
|
|
||||||
}
|
|
||||||
|
|
||||||
HttpEndpoint(JsonStateReader<T> stateReader,
|
response->setLength();
|
||||||
JsonStateUpdater<T> stateUpdater,
|
request->send(response);
|
||||||
StatefulService<T> * statefulService,
|
|
||||||
AsyncWebServer * server,
|
|
||||||
const String & servicePath)
|
|
||||||
: HttpGetEndpoint<T>(stateReader, statefulService, server, servicePath)
|
|
||||||
, HttpPostEndpoint<T>(stateReader, stateUpdater, statefulService, server, servicePath) {
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user