diff --git a/source/RobotAPI/libraries/skills/core/CMakeLists.txt b/source/RobotAPI/libraries/skills/core/CMakeLists.txt index ef3c714725155751e9662216ef1bfdeb56b2e38a..ed1d450e42efa61952a5906fd9732f31ca05d3b8 100644 --- a/source/RobotAPI/libraries/skills/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/skills/core/CMakeLists.txt @@ -15,6 +15,10 @@ armarx_add_library( SOURCES error/Exception.cpp + executor/FluxioExecutor.cpp + executor/FluxioNativeExecutor.cpp + executor/FluxioCompositeExecutor.cpp + executor/FluxioMergerExecutor.cpp SkillID.cpp ProviderID.cpp ProviderInfo.cpp @@ -39,6 +43,10 @@ armarx_add_library( FluxioSkillStatusUpdate.cpp HEADERS error/Exception.h + executor/FluxioExecutor.h + executor/FluxioNativeExecutor.h + executor/FluxioCompositeExecutor.h + executor/FluxioMergerExecutor.h SkillID.h ProviderID.h ProviderInfo.h diff --git a/source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.cpp b/source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.cpp similarity index 97% rename from source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.cpp rename to source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.cpp index de4f945c8e3aa30910c355b21b425340ef7bd65d..88e72c19d6d60350a6d8ac7c7fc2fb14df193518 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.cpp +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.cpp @@ -10,17 +10,15 @@ #include <ArmarXCore/core/logging/Logging.h> -#include "RobotAPI/libraries/skills/core/FluxioControlNode.h" -#include "RobotAPI/libraries/skills/core/FluxioEdge.h" -#include "RobotAPI/libraries/skills/core/FluxioParameter.h" -#include "RobotAPI/libraries/skills/manager/FluxioMergerExecutor.h" +#include "../FluxioControlNode.h" +#include "../FluxioEdge.h" +#include "../FluxioParameter.h" +#include "FluxioMergerExecutor.h" -namespace armarx::plugins +namespace armarx::skills { - FluxioCompositeExecutor::FluxioCompositeExecutor(std::string& id, - SkillManagerComponentPlugin* plugin, - skills::FluxioSkill* skill) : - FluxioExecutor(id, plugin, false), skill(skill) + FluxioCompositeExecutor::FluxioCompositeExecutor(std::string& id, skills::FluxioSkill* skill) : + FluxioExecutor(id, false), skill(skill) { } @@ -640,4 +638,4 @@ namespace armarx::plugins this->status = update; this->statusUpdates.push_front(update); } -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.h b/source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.h similarity index 68% rename from source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.h rename to source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.h index 9d6a7c2fef82541f4581c6f05e869810deec0399..2064a79d53c87d8ead2cdb2abbb1c80892359512 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.h +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.h @@ -4,28 +4,22 @@ #include <optional> #include <string> -#include "RobotAPI/libraries/skills/core/FluxioControlNode.h" -#include "RobotAPI/libraries/skills/core/FluxioParameter.h" -#include "RobotAPI/libraries/skills/core/FluxioParameterNode.h" -#include "RobotAPI/libraries/skills/core/FluxioSkill.h" -#include "RobotAPI/libraries/skills/core/FluxioSkillStatusUpdate.h" -#include "RobotAPI/libraries/skills/core/FluxioSubSkillNode.h" -#include "RobotAPI/libraries/skills/core/SkillExecutionID.h" -#include "RobotAPI/libraries/skills/core/SkillStatusUpdate.h" - +#include "../FluxioControlNode.h" +#include "../FluxioParameter.h" +#include "../FluxioParameterNode.h" +#include "../FluxioSkill.h" +#include "../FluxioSkillStatusUpdate.h" +#include "../FluxioSubSkillNode.h" +#include "../SkillExecutionID.h" +#include "../SkillStatusUpdate.h" #include "FluxioExecutor.h" -#include "SkillManagerComponentPlugin.h" -namespace armarx::plugins +namespace armarx::skills { - class SkillManagerComponentPlugin; // forward declaration - class FluxioCompositeExecutor : public FluxioExecutor { public: - FluxioCompositeExecutor(std::string& id, - SkillManagerComponentPlugin* plugin, - skills::FluxioSkill* skill); + FluxioCompositeExecutor(std::string& id, skills::FluxioSkill* skill); void run(const std::string executorName, armarx::aron::data::DictPtr parameters) override; void abort() override; std::optional<std::vector<skills::FluxioSkillStatusUpdate>> getStatusUpdate() override; @@ -55,4 +49,4 @@ namespace armarx::plugins void pollSubStatuses(); std::map<std::string, FluxioExecutor*> subExecutionsMap; // key is node id }; -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioExecutor.cpp b/source/RobotAPI/libraries/skills/core/executor/FluxioExecutor.cpp similarity index 100% rename from source/RobotAPI/libraries/skills/manager/FluxioExecutor.cpp rename to source/RobotAPI/libraries/skills/core/executor/FluxioExecutor.cpp diff --git a/source/RobotAPI/libraries/skills/manager/FluxioExecutor.h b/source/RobotAPI/libraries/skills/core/executor/FluxioExecutor.h similarity index 56% rename from source/RobotAPI/libraries/skills/manager/FluxioExecutor.h rename to source/RobotAPI/libraries/skills/core/executor/FluxioExecutor.h index f3eadc93f68e28d949c7d4e71147e2dbf9d1c1e1..9ca0992451f5725ccd6353b967c5ad4fb8e7b09b 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioExecutor.h +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioExecutor.h @@ -1,25 +1,21 @@ #pragma once +#include <list> #include <string> #include <vector> -#include "RobotAPI/libraries/skills/core/FluxioSkillStatusUpdate.h" +#include "../FluxioSkillStatusUpdate.h" -#include "SkillManagerComponentPlugin.h" - -namespace armarx::plugins +namespace armarx::skills { - class SkillManagerComponentPlugin; // forward declaration - class FluxioExecutor { public: virtual ~FluxioExecutor(){}; - FluxioExecutor(const std::string& id, SkillManagerComponentPlugin* plugin, bool native) : - id(id), native(native), plugin(plugin){}; - virtual void run(const std::string executorName, armarx::aron::data::DictPtr parameters){}; - virtual void abort(){}; + FluxioExecutor(const std::string& id, bool native) : id(id), native(native){}; + virtual void run(const std::string executorName, armarx::aron::data::DictPtr parameters) {}; + virtual void abort() {}; virtual std::optional<std::vector<skills::FluxioSkillStatusUpdate>> getStatusUpdate() @@ -39,8 +35,7 @@ namespace armarx::plugins protected: std::list<skills::FluxioSkillStatusUpdate> statusUpdates; std::string* executorName = nullptr; - SkillManagerComponentPlugin* plugin = nullptr; std::optional<skills::FluxioSkillStatusUpdate> status = std::nullopt; - virtual void setStatus(skills::SkillStatus status){}; + virtual void setStatus(skills::SkillStatus status) {}; }; -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.cpp b/source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.cpp similarity index 89% rename from source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.cpp rename to source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.cpp index 6df9cff67fec0542d050841df8d56b184e56a140..f8f6728479e34e56d24943de75ac48e785fd3596 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.cpp +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.cpp @@ -6,20 +6,20 @@ #include <ArmarXCore/core/logging/Logging.h> -#include "RobotAPI/libraries/skills/core/SkillStatusUpdate.h" +#include "../SkillStatusUpdate.h" -namespace armarx::plugins +namespace armarx::skills { FluxioMergerExecutor::FluxioMergerExecutor(const std::string& id, - SkillManagerComponentPlugin* plugin, const std::vector<std::string>& parameterIds) : - FluxioExecutor(id, plugin, false) + FluxioExecutor(id, false) { for (const auto& id : parameterIds) { tokenHasArrivedMap[id] = false; } - ARMARX_WARNING << "Fluxio Merger is waiting for the following tokens to arrive: " << parameterIds; + ARMARX_WARNING << "Fluxio Merger is waiting for the following tokens to arrive: " + << parameterIds; } void @@ -94,4 +94,4 @@ namespace armarx::plugins armarx::DateTime::Now(), this->id, "noIdNeeded", status}; this->status = update; } -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.h b/source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.h similarity index 58% rename from source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.h rename to source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.h index 410ebc3d5f725a39103721af908ed8f331a13d89..5f8bcfff89649aec9f9747d4a588705a498af163 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioMergerExecutor.h +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioMergerExecutor.h @@ -3,21 +3,15 @@ #include <optional> #include <string> -#include "RobotAPI/libraries/skills/core/FluxioSkillStatusUpdate.h" - +#include "../FluxioSkillStatusUpdate.h" #include "FluxioExecutor.h" -#include "SkillManagerComponentPlugin.h" -namespace armarx::plugins +namespace armarx::skills { - class SkillManagerComponentPlugin; // forward declaration - class FluxioMergerExecutor : public FluxioExecutor { public: - FluxioMergerExecutor(const std::string& id, - SkillManagerComponentPlugin* plugin, - const std::vector<std::string>& parameterIds); + FluxioMergerExecutor(const std::string& id, const std::vector<std::string>& parameterIds); void run(const std::string executorName, armarx::aron::data::DictPtr parameters) override; void abort() override; @@ -28,4 +22,4 @@ namespace armarx::plugins void setStatus(skills::SkillStatus status) override; std::map<std::string, bool> tokenHasArrivedMap; // keys are parameterIds }; -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.cpp b/source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.cpp similarity index 83% rename from source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.cpp rename to source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.cpp index 5b8ec73b9b3e6973ee2cb50b9d3da59db29f8d95..a88e2df115a1ab49d7f13750d17f1d5e92f680e0 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.cpp +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.cpp @@ -4,22 +4,22 @@ #include <ArmarXCore/core/logging/Logging.h> -#include "RobotAPI/libraries/skills/core/ProviderID.h" -#include "RobotAPI/libraries/skills/core/SkillExecutionRequest.h" -#include "RobotAPI/libraries/skills/core/SkillID.h" +#include "../ProviderID.h" +#include "../SkillExecutionRequest.h" +#include "../SkillID.h" -namespace armarx::plugins +namespace armarx::skills { FluxioNativeExecutor::FluxioNativeExecutor(std::string& id, - SkillManagerComponentPlugin* plugin, skills::SkillID& skillId, std::string& fluxioUUID) : - FluxioExecutor(id, plugin, true), skillId(skillId), fluxioUUID(fluxioUUID) + FluxioExecutor(id, true), skillId(skillId), fluxioUUID(fluxioUUID) { } void - FluxioNativeExecutor::run(const std::string executorName, armarx::aron::data::DictPtr parameters) + FluxioNativeExecutor::run(const std::string executorName, + armarx::aron::data::DictPtr parameters) { skills::SkillExecutionRequest req; req.skillId = skillId; @@ -88,4 +88,4 @@ namespace armarx::plugins this->status = update; this->statusUpdates.push_front(update); } -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.h b/source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.h similarity index 56% rename from source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.h rename to source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.h index 6d44d8a0357e671550679dc54e6e50109e89baf1..fc312fb4b7924af1aea785f573757f737c72e398 100644 --- a/source/RobotAPI/libraries/skills/manager/FluxioNativeExecutor.h +++ b/source/RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.h @@ -3,23 +3,16 @@ #include <optional> #include <string> -#include "RobotAPI/libraries/skills/core/FluxioSkillStatusUpdate.h" -#include "RobotAPI/libraries/skills/core/SkillExecutionID.h" - +#include "../FluxioSkillStatusUpdate.h" +#include "../SkillExecutionID.h" #include "FluxioExecutor.h" -#include "SkillManagerComponentPlugin.h" -namespace armarx::plugins +namespace armarx::skills { - class SkillManagerComponentPlugin; // forward declaration - class FluxioNativeExecutor : public FluxioExecutor { public: - FluxioNativeExecutor(std::string& id, - SkillManagerComponentPlugin* plugin, - skills::SkillID& skillId, - std::string& fluxioUUID); + FluxioNativeExecutor(std::string& id, skills::SkillID& skillId, std::string& fluxioUUID); void run(const std::string executorName, armarx::aron::data::DictPtr parameters) override; void abort() override; @@ -33,4 +26,4 @@ namespace armarx::plugins //std::function<void(skills::SkillID&)> foo; }; -} // namespace armarx::plugins +} // namespace armarx::skills diff --git a/source/RobotAPI/libraries/skills/manager/CMakeLists.txt b/source/RobotAPI/libraries/skills/manager/CMakeLists.txt index 62c21f38007ab621027b00f0b0670815e1c3a03c..34494a91f8cc27d289aa8d28773c10250a4bbb4a 100644 --- a/source/RobotAPI/libraries/skills/manager/CMakeLists.txt +++ b/source/RobotAPI/libraries/skills/manager/CMakeLists.txt @@ -18,17 +18,9 @@ armarx_add_library( SOURCES SkillManagerComponentPlugin.cpp SkillManagerComponentPluginUser.cpp - FluxioExecutor.cpp - FluxioNativeExecutor.cpp - FluxioCompositeExecutor.cpp - FluxioMergerExecutor.cpp HEADERS SkillManagerComponentPlugin.h SkillManagerComponentPluginUser.h - FluxioExecutor.h - FluxioNativeExecutor.h - FluxioCompositeExecutor.h - FluxioMergerExecutor.h ) add_library(RobotAPI::skills::manager ALIAS RobotAPISkillsManager) diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index 05d83f91d0611da9036498949dcfbce8bf187f0b..28abe0c8fd385a3da916e2ea1c7a0e2b6d8f337a 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp @@ -28,15 +28,14 @@ #include "RobotAPI/libraries/skills/core/FluxioProvider.h" #include "RobotAPI/libraries/skills/core/FluxioSkill.h" #include "RobotAPI/libraries/skills/core/FluxioValue.h" -#include "RobotAPI/libraries/skills/manager/FluxioCompositeExecutor.h" -#include "RobotAPI/libraries/skills/manager/FluxioExecutor.h" +#include "RobotAPI/libraries/skills/core/executor/FluxioCompositeExecutor.h" +#include "RobotAPI/libraries/skills/core/executor/FluxioExecutor.h" +#include "RobotAPI/libraries/skills/core/executor/FluxioNativeExecutor.h" #include <RobotAPI/libraries/aron/converter/json/NLohmannJSONConverter.h> #include <RobotAPI/libraries/skills/core/SkillID.h> #include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h> #include <RobotAPI/libraries/skills/core/error/Exception.h> -#include "FluxioNativeExecutor.h" - namespace armarx::plugins { void @@ -619,7 +618,7 @@ namespace armarx::plugins //** Fluxio related methods **// //****************************// - FluxioExecutor* + skills::FluxioExecutor* SkillManagerComponentPlugin::executeFluxioSkill(std::string skillId, const std::string& executorName) { @@ -638,7 +637,7 @@ namespace armarx::plugins armarx::aron::data::DictPtr emptyParameters = {}; fluxioDC.fluxioExecutors[executionId] = - new FluxioCompositeExecutor(executionId, this, &fluxioDC.skills[skillId]); + new skills::FluxioCompositeExecutor(executionId, &fluxioDC.skills[skillId]); std::thread( [this, executionId, executorName, emptyParameters]() @@ -662,7 +661,7 @@ namespace armarx::plugins // FIXME: do not use new, instead use smart pointer std::string fluxioSkillUUID = skill->id; fluxioDC.fluxioExecutors[executionId] = - new FluxioNativeExecutor(executionId, this, sID, fluxioSkillUUID); + new skills::FluxioNativeExecutor(executionId, sID, fluxioSkillUUID); fluxioDC.fluxioExecutors[executionId]->run(executorName, skillDescr->rootProfileDefaults); } @@ -680,13 +679,13 @@ namespace armarx::plugins return; } - FluxioExecutor* executorPtr = executorIt->second; + skills::FluxioExecutor* executorPtr = executorIt->second; if (executorPtr->native) { - FluxioNativeExecutor* castedExecutor = nullptr; + skills::FluxioNativeExecutor* castedExecutor = nullptr; try { - castedExecutor = dynamic_cast<FluxioNativeExecutor*>(executorPtr); + castedExecutor = dynamic_cast<skills::FluxioNativeExecutor*>(executorPtr); if (castedExecutor == nullptr) { ARMARX_WARNING << "Executor with id '" << executionId @@ -705,10 +704,10 @@ namespace armarx::plugins } else { - FluxioCompositeExecutor* castedExecutor = nullptr; + skills::FluxioCompositeExecutor* castedExecutor = nullptr; try { - castedExecutor = dynamic_cast<FluxioCompositeExecutor*>(executorPtr); + castedExecutor = dynamic_cast<skills::FluxioCompositeExecutor*>(executorPtr); if (castedExecutor == nullptr) { ARMARX_WARNING << "Executor with id '" << executionId @@ -737,13 +736,13 @@ namespace armarx::plugins return std::nullopt; } - FluxioExecutor* executorPtr = executorIt->second; + skills::FluxioExecutor* executorPtr = executorIt->second; if (executorPtr->native) { - FluxioNativeExecutor* castedExecutor = nullptr; + skills::FluxioNativeExecutor* castedExecutor = nullptr; try { - castedExecutor = dynamic_cast<FluxioNativeExecutor*>(executorPtr); + castedExecutor = dynamic_cast<skills::FluxioNativeExecutor*>(executorPtr); if (castedExecutor == nullptr) { ARMARX_WARNING << "Executor with id '" << executionId @@ -761,10 +760,10 @@ namespace armarx::plugins return castedExecutor->getStatusUpdate(); } - FluxioCompositeExecutor* castedExecutor = nullptr; + skills::FluxioCompositeExecutor* castedExecutor = nullptr; try { - castedExecutor = dynamic_cast<FluxioCompositeExecutor*>(executorPtr); + castedExecutor = dynamic_cast<skills::FluxioCompositeExecutor*>(executorPtr); if (castedExecutor == nullptr) { ARMARX_WARNING << "Executor with id '" << executionId diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h index fae12bd04626fe150a1b84d3a0d84ffeffe1ee42..6f8a782065779e8e4b36d5ba0091c846f6c44b9d 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h @@ -3,6 +3,7 @@ #include <mutex> #include <optional> #include <string> + #include <boost/uuid/uuid.hpp> #include <ArmarXCore/core/ComponentPlugin.h> @@ -22,8 +23,8 @@ #include <RobotAPI/libraries/skills/core/ProviderInfo.h> #include <RobotAPI/libraries/skills/core/SkillExecutionRequest.h> #include <RobotAPI/libraries/skills/core/SkillStatusUpdate.h> +#include <RobotAPI/libraries/skills/core/executor/FluxioExecutor.h> -#include "FluxioExecutor.h" #include "SkillManagerComponentPluginUser.h" namespace armarx @@ -33,8 +34,6 @@ namespace armarx namespace armarx::plugins { - class FluxioExecutor; // forward declaration - class SkillManagerComponentPlugin : public ComponentPlugin { public: @@ -76,8 +75,8 @@ namespace armarx::plugins //** Fluxio related methods **// //****************************// - FluxioExecutor* executeFluxioSkill(std::string skillId, - const std::string& executorName); + skills::FluxioExecutor* executeFluxioSkill(std::string skillId, + const std::string& executorName); void abortFluxioSkill(const std::string& executionId); @@ -121,12 +120,12 @@ namespace armarx::plugins private: struct FluxioDataCollector { - std::map<std::string, skills::FluxioSkill> skills = {}; - std::map<std::string, skills::FluxioProfile> profiles = {}; - std::map<std::string, skills::FluxioProvider> providers = {}; - std::map<std::string, std::tuple<std::string, armarx::DateTime>> skillMutexMap = {}; + std::map<std::string, skills::FluxioSkill> skills; + std::map<std::string, skills::FluxioProfile> profiles; + std::map<std::string, skills::FluxioProvider> providers; + std::map<std::string, std::tuple<std::string, armarx::DateTime>> skillMutexMap; const std::int64_t mutexTimeout = 30; // minutes - std::map<std::string, FluxioExecutor*> fluxioExecutors = {}; + std::map<std::string, skills::FluxioExecutor*> fluxioExecutors; }; FluxioDataCollector fluxioDC = {}; @@ -141,7 +140,8 @@ namespace armarx::plugins std::vector<T> convertMapValuesToVector(std::map<S, T>& map); static boost::uuids::uuid - createUuidWithString(const std::string& str, std::optional<const boost::uuids::uuid> namespaceUUID = std::nullopt); + createUuidWithString(const std::string& str, + std::optional<const boost::uuids::uuid> namespaceUUID = std::nullopt); static void convertAronObjectPtrToFluxioParameters(std::map<std::string, skills::FluxioParameter>& ret,