Capabilities2 0.3.0
Loading...
Searching...
No Matches
input_multiplex_runner.hpp
Go to the documentation of this file.
1#pragma once
2
4
6{
8{
9public:
16
23 virtual void start(rclcpp::Node::SharedPtr node, const runner_opts& run_config, const std::string& bond_id) override
24 {
25 init_base(node, run_config);
26
27 // emit started event
28 emit_started(bond_id, "", param_on_started());
29 }
30
35 virtual void stop(const std::string& bond_id, const std::string& instance_id = "") override
36 {
37 // if the node pointer is empty then throw an error
38 // this means that the runner was not started and is being used out of order
39
40 if (!node_)
41 throw runner_exception("cannot stop runner that was not started");
42
43 // emit stopped event
44 emit_stopped(bond_id, instance_id, param_on_stopped());
45
46 RCLCPP_INFO(node_->get_logger(), "stopping runner");
47 }
48
49protected:
56 virtual void execution(capabilities2_events::EventParameters parameters, const std::string& thread_id) override
57 {
58 // split thread_id to get bond_id and instance_id (format: "bond_id/instance_id")
59 std::string bond_id = ThreadTriggerRunner::bond_from_thread_id(thread_id);
60 std::string instance_id = ThreadTriggerRunner::instance_from_thread_id(thread_id);
61
62 int input_count = std::any_cast<int>(parameters.get_value("input_count", 1));
63
64 // track the input count for the runner_id
65 if (input_count_tracker.find(instance_id) == input_count_tracker.end())
66 {
67 input_count_tracker[instance_id] = 1;
68 expected_input_count[instance_id] = input_count;
69 }
70 else
71 {
72 input_count_tracker[instance_id] += 1;
73 }
74
75 // check if the input count has reached the expected input count for the instance_id and if so execute the process
76 if (input_count_tracker[instance_id] == expected_input_count[instance_id])
77 {
78 RCLCPP_INFO(node_->get_logger(),
79 "instance_id: %s has received all expected inputs. Executing process for instance_id: %s",
80 instance_id.c_str(), instance_id.c_str());
81
82 // If on_success is defined, emit success event will trigger it. If not defined, it will be a no-op.
83 emit_succeeded(bond_id, instance_id, param_on_success());
84
85 RCLCPP_INFO(node_->get_logger(), "execution successful for instance_id: %s", instance_id.c_str());
86 }
87 else
88 {
89 RCLCPP_INFO(node_->get_logger(),
90 "instance_id: %s pending expected inputs. Current count: %d/%d for instance_id: %s", instance_id.c_str(),
91 input_count_tracker[instance_id], expected_input_count[instance_id], instance_id.c_str());
92 }
93
94 RCLCPP_INFO(node_->get_logger(), "multiplexing complete. Thread closing for instance_id: %s", instance_id.c_str());
95 }
96
97protected:
98 // input count tracker
99 std::map<std::string, int> input_count_tracker;
100
101 // expected input count
102 std::map<std::string, int> expected_input_count;
103
104 // completed executions
105 std::map<std::string, bool> completed_executions;
106};
107
108} // namespace capabilities2_runner
Definition input_multiplex_runner.hpp:8
virtual void stop(const std::string &bond_id, const std::string &instance_id="") override
stop function to cease functionality and shutdown
Definition input_multiplex_runner.hpp:35
std::map< std::string, int > expected_input_count
Definition input_multiplex_runner.hpp:102
InputMultiplexRunner()
Constructor which needs to be empty due to plugin semantics.
Definition input_multiplex_runner.hpp:13
std::map< std::string, bool > completed_executions
Definition input_multiplex_runner.hpp:105
std::map< std::string, int > input_count_tracker
Definition input_multiplex_runner.hpp:99
virtual void execution(capabilities2_events::EventParameters parameters, const std::string &thread_id) override
Trigger process to be executed.
Definition input_multiplex_runner.hpp:56
virtual void start(rclcpp::Node::SharedPtr node, const runner_opts &run_config, const std::string &bond_id) override
Starter function for starting the action runner.
Definition input_multiplex_runner.hpp:23
virtual capabilities2_events::EventParameters param_on_success()
Update on_success event parameters with new data if available.
Definition runner_base.hpp:271
void emit_succeeded(const std::string &bond_id, const std::string &instance_id, capabilities2_events::EventParameters parameters=capabilities2_events::EventParameters())
emit SUCCEEDED event
Definition runner_base.hpp:444
virtual capabilities2_events::EventParameters param_on_started()
Update on_started event parameters with new data if available.
Definition runner_base.hpp:226
void init_base(rclcpp::Node::SharedPtr node, const runner_opts &run_config)
Initializer function for initializing the base runner in place of constructor due to plugin semantics...
Definition runner_base.hpp:126
virtual capabilities2_events::EventParameters param_on_stopped()
Update on_stopped event parameters with new data if available.
Definition runner_base.hpp:241
rclcpp::Node::SharedPtr node_
shared pointer to the capabilities node Allows to use ros node related functionalities
Definition runner_base.hpp:469
void emit_started(const std::string &bond_id, const std::string &instance_id, capabilities2_events::EventParameters parameters=capabilities2_events::EventParameters())
emit STARTED event
Definition runner_base.hpp:418
void emit_stopped(const std::string &bond_id, const std::string &instance_id, capabilities2_events::EventParameters parameters=capabilities2_events::EventParameters())
emit STOPPED event
Definition runner_base.hpp:431
add threaded trigger execution to the runner
Definition threadtrigger_runner.hpp:21
static const std::string bond_from_thread_id(const std::string &thread_id)
helper function to extract bond_id from thread_id
Definition threadtrigger_runner.hpp:30
static const std::string instance_from_thread_id(const std::string &thread_id)
helper function to extract instance_id from thread_id
Definition threadtrigger_runner.hpp:44
Definition action_runner.hpp:19
capability options for a capability runner given by interface and provider
Definition event_parameters.hpp:167
std::any get_value(const std::string &key, std::any default_value)
Get the value of an option by key.
Definition event_parameters.hpp:208
runner exception
Definition runner_base.hpp:24
runner options
Definition runner_base.hpp:56