40 lines
1.5 KiB
C++
40 lines
1.5 KiB
C++
#pragma once
|
|
#include <Arduino.h>
|
|
#include <ArduinoJson.h>
|
|
#include <ESPAsyncWebServer.h>
|
|
#include <Updater.h>
|
|
#include <functional>
|
|
#include <vector>
|
|
#include <tuple>
|
|
|
|
#include "NodeContext.h"
|
|
#include "NodeInfo.h"
|
|
#include "TaskManager.h"
|
|
|
|
using namespace std;
|
|
using namespace std::placeholders;
|
|
|
|
class ApiServer {
|
|
public:
|
|
ApiServer(NodeContext& ctx, TaskManager& taskMgr, uint16_t port = 80);
|
|
void begin();
|
|
void addEndpoint(const String& uri, int method, std::function<void(AsyncWebServerRequest*)> requestHandler);
|
|
void addEndpoint(const String& uri, int method, std::function<void(AsyncWebServerRequest*)> requestHandler,
|
|
std::function<void(AsyncWebServerRequest*, const String&, size_t, uint8_t*, size_t, bool)> uploadHandler);
|
|
private:
|
|
AsyncWebServer server;
|
|
NodeContext& ctx;
|
|
TaskManager& taskManager;
|
|
std::vector<std::tuple<String, int>> serviceRegistry;
|
|
void onClusterMembersRequest(AsyncWebServerRequest *request);
|
|
void methodToStr(const std::tuple<String, int> &endpoint, ArduinoJson::V742PB22::JsonObject &apiObj);
|
|
void onSystemStatusRequest(AsyncWebServerRequest *request);
|
|
void onFirmwareUpdateRequest(AsyncWebServerRequest *request);
|
|
void onFirmwareUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final);
|
|
void onRestartRequest(AsyncWebServerRequest *request);
|
|
|
|
// Task management endpoints
|
|
void onTaskStatusRequest(AsyncWebServerRequest *request);
|
|
void onTaskControlRequest(AsyncWebServerRequest *request);
|
|
};
|