8#include <rclcpp/rclcpp.hpp>
13#include <capabilities2_msgs/msg/capability.hpp>
14#include <capabilities2_msgs/msg/capability_event_code.hpp>
15#include <capabilities2_msgs/msg/capability_connection.hpp>
38 capabilities2_msgs::msg::CapabilityEventCode
type;
41 capabilities2_msgs::msg::Capability
target;
48 EventNode(std::shared_ptr<EventBase> event_emitter =
nullptr)
64 void emit_event(
const std::string& bond_id,
const std::string& instance_id,
const uint8_t& event_type,
79 size_t first_pos = conn_id.find(
'/');
80 size_t second_pos = conn_id.find(
'/', first_pos + 1);
82 std::string conn_bond_id = (first_pos != std::string::npos) ? conn_id.substr(0, first_pos) : conn_id;
83 std::string conn_instance_id =
84 (second_pos != std::string::npos) ? conn_id.substr(first_pos + 1, second_pos - first_pos - 1) :
"";
87 if (connection.type.code == event_type && bond_id == conn_bond_id && instance_id == conn_instance_id)
93 if (!parameters.is_empty())
94 for (
auto& option : parameters.options)
95 old_parameters.set_value(option.key, option.get_value(), option.type);
98 auto target_with_params = old_parameters.toMsg();
101 target_with_params.capability = connection.target.capability;
102 target_with_params.provider = connection.target.provider;
103 target_with_params.instance_id = connection.target.instance_id;
123 void set_source(
const capabilities2_msgs::msg::Capability& src)
154 void add_connection(
const std::string& connection_id,
const capabilities2_msgs::msg::CapabilityEventCode& type,
160 throw event_exception(
"connection with id: " + connection_id +
" already exists");
190 throw event_exception(
"connection with id: " + connection_id +
" does not exist");
192 auto target = it->second.target;
219 std::vector<capabilities2_msgs::msg::CapabilityConnection> conns;
223 capabilities2_msgs::msg::CapabilityConnection c;
224 c.type = connection.type;
226 c.target = connection.target;
270 const capabilities2_msgs::msg::Capability&
get_source()
const
std::function< void(const access_id_t &, const capability_str_t &, const target_instance_id_t &, parameter_t)> event_callback_t
Definition event_base.hpp:49
an event node is a source of an event
Definition event_node.hpp:26
const capabilities2_msgs::msg::Capability & get_source() const
source capability of this event node
Definition event_node.hpp:270
std::shared_ptr< EventBase > event_emitter_
Definition event_node.hpp:293
virtual ~EventNode()=default
void set_source(const capabilities2_msgs::msg::Capability &src)
Set the source object.
Definition event_node.hpp:123
const std::string & get_id() const
unique id of this event node
Definition event_node.hpp:260
std::vector< capabilities2_msgs::msg::CapabilityConnection > list_connections() const
List all connections from this event node.
Definition event_node.hpp:217
void remove_connection(const std::string &connection_id)
Remove a connection by its id.
Definition event_node.hpp:184
void clear_connections()
clear all connections from this event node
Definition event_node.hpp:207
std::string id_
Definition event_node.hpp:286
EventNode(std::shared_ptr< EventBase > event_emitter=nullptr)
Definition event_node.hpp:48
size_t connection_count() const
current connection count
Definition event_node.hpp:250
void set_event_emitter(std::shared_ptr< EventBase > event_emitter)
event emitter for this event node
Definition event_node.hpp:135
bool has_connection(const std::string &connection_id) const
Check if a connection exists.
Definition event_node.hpp:240
void add_connection(const std::string &connection_id, const capabilities2_msgs::msg::CapabilityEventCode &type, const capabilities2_msgs::msg::Capability &target, EventBase::event_callback_t event_cb)
make EventNode::add_connection public method on runner api.
Definition event_node.hpp:154
capabilities2_msgs::msg::Capability source_
Definition event_node.hpp:289
bool is_event_emitter_set() const
event emitter is set on this node
Definition event_node.hpp:278
std::map< std::string, EventPipe > connections_
Definition event_node.hpp:298
void emit_event(const std::string &bond_id, const std::string &instance_id, const uint8_t &event_type, capabilities2_events::EventParameters parameters=capabilities2_events::EventParameters())
emit an event from this event node to all matching connections
Definition event_node.hpp:64
Definition uuid_generator.hpp:8
Definition event_base.hpp:14
event pipe structure
Definition event_node.hpp:36
EventBase::event_callback_t callback
Definition event_node.hpp:44
capabilities2_msgs::msg::CapabilityEventCode type
Definition event_node.hpp:38
capabilities2_msgs::msg::Capability target
Definition event_node.hpp:41
capability options for a capability runner given by interface and provider
Definition event_parameters.hpp:167
event exception
Definition event_base.hpp:22