#pragma once #include #include #include #include #include #include #include #include "NodeContext.h" #include "NodeInfo.h" #include "TaskManager.h" #include "ApiTypes.h" class Service; // Forward declaration class ApiServer { public: ApiServer(NodeContext& ctx, TaskManager& taskMgr, uint16_t port = 80); void begin(); void addService(Service& service); void addEndpoint(const String& uri, int method, std::function requestHandler); void addEndpoint(const String& uri, int method, std::function requestHandler, std::function uploadHandler); void addEndpoint(const String& uri, int method, std::function requestHandler, const std::vector& params); void addEndpoint(const String& uri, int method, std::function requestHandler, std::function uploadHandler, const std::vector& params); static const char* methodToStr(int method); private: AsyncWebServer server; NodeContext& ctx; TaskManager& taskManager; std::vector> services; std::vector> serviceRegistry; // Internal helpers void registerServiceForLocalNode(const String& uri, int method); };