Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "Recursive.h"
#include "RobotAPI/libraries/skills/core/SkillDescription.h"
namespace armarx::skills::provider
{
Recursive::Recursive() : SimpleSpecializedSkill<skills::Example::RecursiveSkillParams>(GetSkillDescription())
{
}
SkillDescription
Recursive::GetSkillDescription()
{
armarx::skills::Example::RecursiveSkillParams root_profile_params;
root_profile_params.n = 10;
return SkillDescription{.skillId = skills::SkillID{.skillName = "Recursive"},
.description = "This skill calls itself recursively {n} times",
.rootProfileDefaults = root_profile_params.toAron(),
.timeout = armarx::core::time::Duration::MilliSeconds(10000),
.parametersType =
armarx::skills::Example::RecursiveSkillParams::ToAronType(),
.resultType = armarx::skills::Example::RecursiveSkillParams::ToAronType()};
}
Skill::MainResult
Recursive::main(const SpecializedMainInput& in)
{
const int n = in.parameters.n;
if (n > 0)
{
SkillProxy prx(manager,
skills::SkillID{.providerId = *getSkillId().providerId, .skillName = "Recursive"});
armarx::skills::Example::RecursiveSkillParams params;
params.n = n - 1;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
callSubskill(prx, params.toAron());
}
throwIfSkillShouldTerminate();
return {TerminatedSkillStatus::Succeeded, nullptr};
}
} // namespace armarx::skills::provider