FluxioCompositeExecutor.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <atomic>
4 #include <experimental/memory>
5 #include <optional>
6 #include <shared_mutex>
7 #include <string>
8 
12 
13 #include "../FluxioControlNode.h"
14 #include "../FluxioParameter.h"
15 #include "../FluxioParameterNode.h"
16 #include "../FluxioSkill.h"
17 #include "../FluxioSkillStatusUpdate.h"
18 #include "../FluxioSubSkillNode.h"
19 #include "../SkillExecutionID.h"
20 #include "../SkillStatusUpdate.h"
21 #include "FluxioExecutor.h"
22 
23 namespace armarx::skills
24 {
26  {
27  public:
29  const std::string& id,
30  const skills::FluxioSkill& skill,
31  const std::function<void(const std::string& executionId)>&& abortFluxioSkillFunc,
34  const std::string& skillId,
35  const std::string& profileId,
36  const std::string& executorName,
37  armarx::aron::data::DictPtr parameters)>&& executeFluxioSkillFunc,
39  const std::vector<std::string>& parameterIds)>&& addMergerExecutorToDCFunc);
40 
41  void run(std::string executorName,
42  armarx::aron::data::DictPtr parameters,
44  void abort() override;
45  std::optional<std::vector<skills::FluxioSkillStatusUpdate>> getStatusUpdate() override;
47 
48  private:
49  void startSubRoutine(
52  std::atomic_bool& running,
53  const std::string& executorName,
55 
56  void handleParameterRoutine(
58  std::atomic_bool& running,
59  const std::string& executorName);
60 
61  void handleSubSkillRoutine(
63  std::atomic_bool& running,
64  const std::string& executorName,
66 
67  void handleControlRoutine(
70  std::atomic_bool& running,
71  const std::string& executorName,
73 
74  void abortSubExecutions();
75 
76 
77  void setStatus(skills::SkillStatus status, const std::string& nodeId = "noId") override;
78 
79  void pollSubStatuses();
80 
81  const std::function<void(const std::string& executionId)> abortFluxioSkill;
82 
83  const std::function<skills::Result<std::experimental::observer_ptr<FluxioExecutor>,
85  const std::string& skillId,
86  const std::string& profileId,
87  const std::string& executorName,
88  armarx::aron::data::DictPtr parameters)>
89  executeFluxioSkill;
90 
91  const std::function<std::experimental::observer_ptr<FluxioExecutor>(
92  const std::vector<std::string>& parameterIds)>
93  addMergerExecutorToDC;
94 
95  std::optional<skills::SkillExecutionID> executionId = std::nullopt;
96  const skills::FluxioSkill& skill;
97  std::map<std::string, std::experimental::observer_ptr<FluxioExecutor>>
98  subExecutionsMap; // key is node id
99  std::shared_mutex subExecutionsMapMutex;
100 
101  const armarx::Duration pollingFrequency = armarx::Duration::MilliSeconds(250);
102  };
103 } // namespace armarx::skills
armarx::skills::FluxioSkill
Definition: FluxioSkill.h:25
armarx::skills::FluxioEdge
Definition: FluxioEdge.h:15
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:13
armarx::skills::error::FluxioException
A base class for skill exceptions.
Definition: FluxioException.h:24
armarx::skills
This file is part of ArmarX.
Definition: PeriodicUpdateWidget.cpp:11
armarx::skills::FluxioExecutor::executorName
std::optional< std::string > executorName
Definition: FluxioExecutor.h:51
FluxioResult.h
armarx::skills::FluxioExecutor
Definition: FluxioExecutor.h:21
std::experimental::fundamentals_v2::observer_ptr
Definition: ManagedIceObject.h:53
Dict.h
armarx::status
status
Definition: FiniteStateMachine.h:244
FluxioException.h
FluxioExecutor.h
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::skills::FluxioCompositeExecutor::abort
void abort() override
Definition: FluxioCompositeExecutor.cpp:682
armarx::skills::FluxioCompositeExecutor::FluxioCompositeExecutor
FluxioCompositeExecutor(const std::string &id, const skills::FluxioSkill &skill, const std::function< void(const std::string &executionId)> &&abortFluxioSkillFunc, const std::function< skills::Result< std::experimental::observer_ptr< FluxioExecutor >, skills::error::FluxioException >(const std::string &skillId, const std::string &profileId, const std::string &executorName, armarx::aron::data::DictPtr parameters)> &&executeFluxioSkillFunc, const std::function< std::experimental::observer_ptr< FluxioExecutor >(const std::vector< std::string > &parameterIds)> &&addMergerExecutorToDCFunc)
Definition: FluxioCompositeExecutor.cpp:32
armarx::core::time::Duration
Represents a duration.
Definition: Duration.h:16
armarx::skills::FluxioCompositeExecutor::run
void run(std::string executorName, armarx::aron::data::DictPtr parameters, std::experimental::observer_ptr< const FluxioProfile > profilePtr) override
Definition: FluxioCompositeExecutor.cpp:62
armarx::skills::FluxioCompositeExecutor
Definition: FluxioCompositeExecutor.h:25
armarx::skills::FluxioCompositeExecutor::validateSkill
bool validateSkill(skills::FluxioEdge &ret) const
Definition: FluxioCompositeExecutor.cpp:753
armarx::skills::Result
Definition: FluxioResult.h:12
armarx::core::time::Duration::MilliSeconds
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition: Duration.cpp:48
armarx::skills::FluxioCompositeExecutor::getStatusUpdate
std::optional< std::vector< skills::FluxioSkillStatusUpdate > > getStatusUpdate() override
Definition: FluxioCompositeExecutor.cpp:713
armarx::skills::SkillStatus
SkillStatus
Definition: SkillStatusUpdate.h:15