diff --git a/ESP/lib/src/data/CommandManager/BaseCommand.cpp b/ESP/lib/src/data/CommandManager/BaseCommand.cpp new file mode 100644 index 0000000..22a7a96 --- /dev/null +++ b/ESP/lib/src/data/CommandManager/BaseCommand.cpp @@ -0,0 +1,19 @@ +#include "BaseCommand.hpp" + +CommandResult PingCommand::execute() { + return CommandResult::getSuccessResult("pong"); +} + +CommandResult ToggleStreamCommand::validate() { + if (!data.containsKey("state")) + return CommandResult::getErrorResult("Missing state field"); + + return CommandResult::getSuccessResult(""); +} + +CommandResult ToggleStreamCommand::execute() { + this->streamServer.toggleTCPStream(data["state"].as()); + + return CommandResult::getSuccessResult("TCP Stream state set to:" + + data["state"].as()); +} \ No newline at end of file diff --git a/ESP/lib/src/data/CommandManager/Command.hpp b/ESP/lib/src/data/CommandManager/BaseCommand.hpp similarity index 61% rename from ESP/lib/src/data/CommandManager/Command.hpp rename to ESP/lib/src/data/CommandManager/BaseCommand.hpp index e098b54..396ccc8 100644 --- a/ESP/lib/src/data/CommandManager/Command.hpp +++ b/ESP/lib/src/data/CommandManager/BaseCommand.hpp @@ -1,9 +1,11 @@ #ifndef COMMAND_HPP #define COMMAND_HPP #include + #include #include #include + #include "data/config/project_config.hpp" #include "network/stream/streamServer.hpp" @@ -56,54 +58,6 @@ class PingCommand : public ICommand { CommandResult execute() override; }; -class SetWiFiCommand : public ICommand { - ProjectConfig& projectConfig; - JsonVariant data; - - public: - SetWiFiCommand(ProjectConfig& projectConfig, JsonVariant data) - : projectConfig(projectConfig), data(data) {} - CommandResult validate() override; - CommandResult execute() override; -}; - -class SetMDNSCommand : public ICommand { - ProjectConfig& projectConfig; - JsonVariant data; - - public: - SetMDNSCommand(ProjectConfig& projectConfig, JsonVariant data) - : projectConfig(projectConfig), data(data) {} - CommandResult validate() override; - CommandResult execute() override; -}; - -class SaveConfigCommand : public ICommand { - ProjectConfig& projectConfig; - - public: - SaveConfigCommand(ProjectConfig& projectConfig) - : projectConfig(projectConfig) {} - - CommandResult validate() override { - return CommandResult::getSuccessResult(""); - }; - - CommandResult execute() override; -}; - -class SetFPSCommand : public ICommand { - ProjectConfig& projectConfig; - JsonVariant data; - - public: - SetFPSCommand(ProjectConfig& projectConfig, JsonVariant data) - : projectConfig(projectConfig), data(data) {} - - CommandResult validate() override; - CommandResult execute() override; -}; - class ToggleStreamCommand : public ICommand { StreamServer& streamServer; JsonVariant data; diff --git a/ESP/lib/src/data/CommandManager/CommandManager.hpp b/ESP/lib/src/data/CommandManager/CommandManager.hpp index 9a6632d..e571c90 100644 --- a/ESP/lib/src/data/CommandManager/CommandManager.hpp +++ b/ESP/lib/src/data/CommandManager/CommandManager.hpp @@ -2,18 +2,18 @@ #ifndef TASK_MANAGER_HPP #define TASK_MANAGER_HPP #include -#include -#include -#include -#include #include #include #include +#include #include +#include +#include +#include #include -#include "data/CommandManager/Command.hpp" +#include "data/CommandManager/BaseCommand.hpp" #include "data/config/project_config.hpp" #include "network/stream/streamServer.hpp" @@ -41,10 +41,10 @@ const std::unordered_map commandMap = { class CommandManager { private: - ProjectConfig& projectConfig; - StreamServer& streamServer; + ProjectConfig &projectConfig; + StreamServer &streamServer; - std::string join_strings(std::vector const& strings, + std::string join_strings(std::vector const &strings, std::string delim) { std::stringstream ss; std::copy(strings.begin(), strings.end(), @@ -52,21 +52,21 @@ class CommandManager { return ss.str(); } - bool hasDataField(JsonVariant& command); + bool hasDataField(JsonVariant &command); std::unique_ptr createCommand(CommandType commandType, - JsonVariant& data); + JsonVariant &data); std::variant, CommandResult> - createCommandFromJsonVariant(JsonVariant& command); + createCommandFromJsonVariant(JsonVariant &command); - CommandType getCommandType(JsonVariant& command); + CommandType getCommandType(JsonVariant &command); // // TODO rewrite the API // // TODO add FPS/ Freq / cropping to the API // // TODO rewrite camera handler to be simpler and easier to change public: - CommandManager(ProjectConfig& projectConfig, StreamServer& streamServer) + CommandManager(ProjectConfig &projectConfig, StreamServer &streamServer) : projectConfig(projectConfig), streamServer(streamServer) {}; CommandResult handleSingleCommand(CommandsPayload commandsPayload); diff --git a/ESP/lib/src/data/CommandManager/Command.cpp b/ESP/lib/src/data/CommandManager/ConfigCommands.cpp similarity index 68% rename from ESP/lib/src/data/CommandManager/Command.cpp rename to ESP/lib/src/data/CommandManager/ConfigCommands.cpp index f87a57a..ace5d11 100644 --- a/ESP/lib/src/data/CommandManager/Command.cpp +++ b/ESP/lib/src/data/CommandManager/ConfigCommands.cpp @@ -1,8 +1,4 @@ -#include "Command.hpp" - -CommandResult PingCommand::execute() { - return CommandResult::getSuccessResult("pong"); -} +#include "ConfigCommands.hpp" CommandResult SetWiFiCommand::validate() { if (!data.containsKey("ssid")) @@ -31,11 +27,20 @@ CommandResult SetMDNSCommand::validate() { } CommandResult SetMDNSCommand::execute() { - projectConfig.setMDNSConfig(data["hostname"], "openiristracker", false); + projectConfig.setMDNSConfig(data, false); return CommandResult::getSuccessResult("MDNS set to:" + data["hostname"].as()); } +CommandResult SetDeviceConfigCommand::validate() { + return CommandResult::getSuccessResult(""); +} + +CommandResult SetDeviceConfigCommand::execute() { + projectConfig.setDeviceConfig(data, false); + return CommandResult::getSuccessResult("Device config updated."); +} + CommandResult SaveConfigCommand::execute() { projectConfig.save(); return CommandResult::getSuccessResult("CONFIG SAVED"); @@ -49,23 +54,7 @@ CommandResult SetFPSCommand::validate() { } CommandResult SetFPSCommand::execute() { - // handle FPS here, poc of the interface: - // auto defaultCameraSettings = projectConfig.getDefaultCameraSettings(); - // projectConfig.setCamera(..defaultCameraSettings, data["fps"]); + projectConfig.setCameraConfig("fps", data["fps"]); return CommandResult::getSuccessResult("FPS set to:" + data["fps"].as()); -} - -CommandResult ToggleStreamCommand::validate() { - if (!data.containsKey("state")) - return CommandResult::getErrorResult("Missing state field"); - - return CommandResult::getSuccessResult(""); -} - -CommandResult ToggleStreamCommand::execute() { - this->streamServer.toggleTCPStream(data["state"].as()); - - return CommandResult::getSuccessResult("TCP Stream state set to:" + - data["state"].as()); } \ No newline at end of file diff --git a/ESP/lib/src/data/CommandManager/ConfigCommands.hpp b/ESP/lib/src/data/CommandManager/ConfigCommands.hpp new file mode 100644 index 0000000..ac8d19e --- /dev/null +++ b/ESP/lib/src/data/CommandManager/ConfigCommands.hpp @@ -0,0 +1,61 @@ +#include "data/CommandManager/BaseCommand.hpp" + +// todo: make use of the update +class SetWiFiCommand : public ICommand { + ProjectConfig& projectConfig; + JsonVariant data; + + public: + SetWiFiCommand(ProjectConfig& projectConfig, JsonVariant data) + : projectConfig(projectConfig), data(data) {} + CommandResult validate() override; + CommandResult execute() override; +}; + +class SetMDNSCommand : public ICommand { + ProjectConfig& projectConfig; + JsonVariant data; + + public: + SetMDNSCommand(ProjectConfig& projectConfig, JsonVariant data) + : projectConfig(projectConfig), data(data) {} + CommandResult validate() override; + CommandResult execute() override; +}; + +class SetDeviceConfigCommand : public ICommand { + ProjectConfig& projectConfig; + JsonVariant data; + + public: + SetDeviceConfigCommand(ProjectConfig& projectConfig, JsonVariant data) + : projectConfig(projectConfig), data(data) {} + CommandResult validate() override; + CommandResult execute() override; +}; + +class SaveConfigCommand : public ICommand { + ProjectConfig& projectConfig; + + public: + SaveConfigCommand(ProjectConfig& projectConfig) + : projectConfig(projectConfig) {} + + CommandResult validate() override { + return CommandResult::getSuccessResult(""); + }; + + CommandResult execute() override; +}; + +class SetFPSCommand : public ICommand { + ProjectConfig& projectConfig; + JsonVariant data; + + public: + SetFPSCommand(ProjectConfig& projectConfig, JsonVariant data) + : projectConfig(projectConfig), data(data) {} + + CommandResult validate() override; + CommandResult execute() override; +};