ROS 2 rclcpp + rcl - lyrical  lyrical
ROS 2 C++ Client Library with ROS Client Library
Public Member Functions | List of all members
rclcpp::GenericSubscription Class Reference

Subscription for serialized messages whose type is not known at compile time. More...

#include <rclcpp/generic_subscription.hpp>

Inheritance diagram for rclcpp::GenericSubscription:
Inheritance graph
[legend]
Collaboration diagram for rclcpp::GenericSubscription:
Collaboration graph
[legend]

Public Member Functions

template<typename AllocatorT = std::allocator<void>>
 GenericSubscription (rclcpp::node_interfaces::NodeBaseInterface *node_base, const std::shared_ptr< rcpputils::SharedLibrary > ts_lib, const std::string &topic_name, const std::string &topic_type, const rclcpp::QoS &qos, AnySubscriptionCallback< rclcpp::SerializedMessage, AllocatorT > callback, const rclcpp::SubscriptionOptionsWithAllocator< AllocatorT > &options)
 Constructor. More...
 
RCLCPP_PUBLIC std::shared_ptr< void > create_message () override
 Borrow a new message. More...
 
RCLCPP_PUBLIC std::shared_ptr< rclcpp::SerializedMessagecreate_serialized_message () override
 Borrow a new serialized message. More...
 
RCLCPP_PUBLIC void disable_callbacks () override
 Disable callbacks from being called. More...
 
RCLCPP_PUBLIC void enable_callbacks () override
 Enable the callbacks to be called. More...
 
RCLCPP_PUBLIC void handle_message (std::shared_ptr< void > &message, const rclcpp::MessageInfo &message_info) override
 Cast the message to a rclcpp::SerializedMessage and call the callback.
 
RCLCPP_PUBLIC void handle_serialized_message (const std::shared_ptr< rclcpp::SerializedMessage > &serialized_message, const rclcpp::MessageInfo &message_info) override
 Handle dispatching rclcpp::SerializedMessage to user callback.
 
RCLCPP_PUBLIC void handle_loaned_message (void *loaned_message, const rclcpp::MessageInfo &message_info) override
 This function is currently not implemented.
 
RCLCPP_PUBLIC void return_message (std::shared_ptr< void > &message) override
 Return the message borrowed in create_message. More...
 
RCLCPP_PUBLIC void return_serialized_message (std::shared_ptr< rclcpp::SerializedMessage > &message) override
 Return the message borrowed in create_serialized_message. More...
 
RCLCPP_PUBLIC rclcpp::dynamic_typesupport::DynamicMessageType::SharedPtr get_shared_dynamic_message_type () override
 
RCLCPP_PUBLIC rclcpp::dynamic_typesupport::DynamicMessage::SharedPtr get_shared_dynamic_message () override
 
RCLCPP_PUBLIC rclcpp::dynamic_typesupport::DynamicSerializationSupport::SharedPtr get_shared_dynamic_serialization_support () override
 
RCLCPP_PUBLIC rclcpp::dynamic_typesupport::DynamicMessage::SharedPtr create_dynamic_message () override
 Borrow a new serialized message (this clones!) More...
 
RCLCPP_PUBLIC void return_dynamic_message (rclcpp::dynamic_typesupport::DynamicMessage::SharedPtr &message) override
 
RCLCPP_PUBLIC void handle_dynamic_message (const rclcpp::dynamic_typesupport::DynamicMessage::SharedPtr &message, const rclcpp::MessageInfo &message_info) override
 
- Public Member Functions inherited from rclcpp::SubscriptionBase
RCLCPP_PUBLIC SubscriptionBase (rclcpp::node_interfaces::NodeBaseInterface *node_base, const rosidl_message_type_support_t &type_support_handle, const std::string &topic_name, const rcl_subscription_options_t &subscription_options, const SubscriptionEventCallbacks &event_callbacks, bool use_default_callbacks, DeliveredMessageKind delivered_message_kind=DeliveredMessageKind::ROS_MESSAGE)
 Constructor. More...
 
virtual RCLCPP_PUBLIC ~SubscriptionBase ()
 Destructor.
 
RCLCPP_PUBLIC void bind_event_callbacks (const SubscriptionEventCallbacks &event_callbacks, bool use_default_callbacks)
 Add event handlers for passed in event_callbacks.
 
RCLCPP_PUBLIC const char * get_topic_name () const
 Get the topic that this subscription is subscribed on.
 
RCLCPP_PUBLIC std::shared_ptr< rcl_subscription_tget_subscription_handle ()
 
RCLCPP_PUBLIC std::shared_ptr< const rcl_subscription_tget_subscription_handle () const
 
RCLCPP_PUBLIC const std::unordered_map< rcl_subscription_event_type_t, std::shared_ptr< rclcpp::EventHandlerBase > > & get_event_handlers () const
 Get all the QoS event handlers associated with this subscription. More...
 
RCLCPP_PUBLIC rclcpp::QoS get_actual_qos () const
 Get the actual QoS settings, after the defaults have been determined. More...
 
RCLCPP_PUBLIC bool take_type_erased (void *message_out, rclcpp::MessageInfo &message_info_out)
 Take the next inter-process message from the subscription as a type erased pointer. More...
 
RCLCPP_PUBLIC bool take_serialized (rclcpp::SerializedMessage &message_out, rclcpp::MessageInfo &message_info_out)
 Take the next inter-process message, in its serialized form, from the subscription. More...
 
RCLCPP_PUBLIC const rosidl_message_type_support_t & get_message_type_support_handle () const
 
RCLCPP_PUBLIC bool is_serialized () const
 Return if the subscription is serialized. More...
 
RCLCPP_PUBLIC DeliveredMessageKind get_delivered_message_kind () const
 Return the delivered message kind. More...
 
RCLCPP_PUBLIC size_t get_publisher_count () const
 Get matching publisher count. More...
 
RCLCPP_PUBLIC bool can_loan_messages () const
 Check if subscription instance can loan messages. More...
 
RCLCPP_PUBLIC void setup_intra_process (uint64_t intra_process_subscription_id, IntraProcessManagerWeakPtr weak_ipm)
 Implemenation detail.
 
RCLCPP_PUBLIC rclcpp::Waitable::SharedPtr get_intra_process_waitable () const
 Return the waitable for intra-process. More...
 
RCLCPP_PUBLIC bool exchange_in_use_by_wait_set_state (void *pointer_to_subscription_part, bool in_use_state)
 Exchange state of whether or not a part of the subscription is used by a wait set. More...
 
RCLCPP_PUBLIC std::vector< rclcpp::NetworkFlowEndpointget_network_flow_endpoints () const
 Get network flow endpoints. More...
 
void set_on_new_message_callback (const std::function< void(size_t)> &callback)
 Set a callback to be called when each new message is received. More...
 
void clear_on_new_message_callback ()
 Unset the callback registered for new messages, if any.
 
void set_on_new_intra_process_message_callback (const std::function< void(size_t)> &callback)
 Set a callback to be called when each new intra-process message is received. More...
 
void clear_on_new_intra_process_message_callback ()
 Unset the callback registered for new intra-process messages, if any.
 
void set_on_new_qos_event_callback (const std::function< void(size_t)> &callback, rcl_subscription_event_type_t event_type)
 Set a callback to be called when each new qos event instance occurs. More...
 
void clear_on_new_qos_event_callback (rcl_subscription_event_type_t event_type)
 Unset the callback registered for new qos events, if any.
 
RCLCPP_PUBLIC bool is_cft_supported () const
 Check if content filtered topic feature of the subscription instance is supported. More...
 
RCLCPP_PUBLIC bool is_cft_enabled () const
 Check if content filtered topic feature of the subscription instance is enabled. More...
 
RCLCPP_PUBLIC void set_content_filter (const std::string &filter_expression, const std::vector< std::string > &expression_parameters={})
 Set the filter expression and expression parameters for the subscription. More...
 
RCLCPP_PUBLIC rclcpp::ContentFilterOptions get_content_filter () const
 Get the filter expression and expression parameters for the subscription. More...
 
RCLCPP_PUBLIC bool take_dynamic_message (rclcpp::dynamic_typesupport::DynamicMessage &message_out, rclcpp::MessageInfo &message_info_out)
 

Additional Inherited Members

- Public Types inherited from rclcpp::SubscriptionBase
using IntraProcessManagerWeakPtr = std::weak_ptr< rclcpp::experimental::IntraProcessManager >
 
- Protected Member Functions inherited from rclcpp::SubscriptionBase
template<typename EventCallbackT >
void add_event_handler (const EventCallbackT &callback, const rcl_subscription_event_type_t event_type)
 
RCLCPP_PUBLIC void default_incompatible_qos_callback (QOSRequestedIncompatibleQoSInfo &info) const
 
RCLCPP_PUBLIC void default_incompatible_type_callback (IncompatibleTypeInfo &info) const
 
RCLCPP_PUBLIC bool matches_any_intra_process_publishers (const rmw_gid_t *sender_gid) const
 
RCLCPP_PUBLIC void set_on_new_message_callback (rcl_event_callback_t callback, const void *user_data)
 
- Protected Attributes inherited from rclcpp::SubscriptionBase
rclcpp::node_interfaces::NodeBaseInterface *const node_base_
 
std::shared_ptr< rcl_node_tnode_handle_
 
std::recursive_mutex on_new_message_callback_mutex_
 
std::function< void(size_t)> on_new_message_callback_ {nullptr}
 
std::shared_ptr< rcl_subscription_tsubscription_handle_
 
std::shared_ptr< rcl_subscription_tintra_process_subscription_handle_
 
rclcpp::Logger node_logger_
 
std::unordered_map< rcl_subscription_event_type_t, std::shared_ptr< rclcpp::EventHandlerBase > > event_handlers_
 
bool use_intra_process_
 
IntraProcessManagerWeakPtr weak_ipm_
 
uint64_t intra_process_subscription_id_
 
std::shared_ptr< rclcpp::experimental::SubscriptionIntraProcessBasesubscription_intra_process_
 
const SubscriptionEventCallbacks event_callbacks_
 

Detailed Description

Subscription for serialized messages whose type is not known at compile time.

Since the type is not known at compile time, this is not a template, and the dynamic library containing type support information has to be identified and loaded based on the type name.

It does not support intra-process handling.

Definition at line 45 of file generic_subscription.hpp.

Constructor & Destructor Documentation

◆ GenericSubscription()

template<typename AllocatorT = std::allocator<void>>
rclcpp::GenericSubscription::GenericSubscription ( rclcpp::node_interfaces::NodeBaseInterface node_base,
const std::shared_ptr< rcpputils::SharedLibrary >  ts_lib,
const std::string &  topic_name,
const std::string &  topic_type,
const rclcpp::QoS qos,
AnySubscriptionCallback< rclcpp::SerializedMessage, AllocatorT >  callback,
const rclcpp::SubscriptionOptionsWithAllocator< AllocatorT > &  options 
)
inline

Constructor.

In order to properly subscribe to a topic, this subscription needs to be added to the node_topic_interface of the node passed into this constructor.

See also
rclcpp::Node::create_generic_subscription() or rclcpp::create_generic_subscription() for creating an instance of this class and adding it to the node_topic_interface.
Parameters
node_basePointer to parent node's NodeBaseInterface
ts_libType support library, needs to correspond to topic_type
topic_nameTopic name
topic_typeTopic type
qosQoS settings
callbackCallback for new messages of serialized form
optionsSubscription options. Not all subscription options are currently respected, the only relevant options for this subscription are event_callbacks, use_default_callbacks, ignore_local_publications, and callback_group.

Definition at line 71 of file generic_subscription.hpp.

Member Function Documentation

◆ create_dynamic_message()

rclcpp::dynamic_typesupport::DynamicMessage::SharedPtr rclcpp::GenericSubscription::create_dynamic_message ( )
overridevirtual

Borrow a new serialized message (this clones!)

Returns
Shared pointer to a rclcpp::dynamic_typesupport::DynamicMessage.

Implements rclcpp::SubscriptionBase.

Definition at line 129 of file generic_subscription.cpp.

◆ create_message()

std::shared_ptr< void > rclcpp::GenericSubscription::create_message ( )
overridevirtual

Borrow a new message.

Returns
Shared pointer to the fresh message.

Implements rclcpp::SubscriptionBase.

Definition at line 29 of file generic_subscription.cpp.

References create_serialized_message().

Here is the call graph for this function:

◆ create_serialized_message()

std::shared_ptr< rclcpp::SerializedMessage > rclcpp::GenericSubscription::create_serialized_message ( )
overridevirtual

Borrow a new serialized message.

Returns
Shared pointer to a rcl_message_serialized_t.

Implements rclcpp::SubscriptionBase.

Definition at line 35 of file generic_subscription.cpp.

Referenced by create_message().

Here is the caller graph for this function:

◆ disable_callbacks()

void rclcpp::GenericSubscription::disable_callbacks ( )
overridevirtual

Disable callbacks from being called.

This method will block, until any subscription's callbacks provided during construction currently being executed are finished.

Note
This method also temporary removes the on new message callback and all on new event callbacks from the rmw layer to prevent them from being called. However, this method will not block and wait until the currently executing on_new_[message]event callbacks are finished.

Reimplemented from rclcpp::SubscriptionBase.

Definition at line 41 of file generic_subscription.cpp.

References rclcpp::AnySubscriptionCallback< MessageT, AllocatorT >::disable(), and rclcpp::SubscriptionBase::disable_callbacks().

Here is the call graph for this function:

◆ enable_callbacks()

void rclcpp::GenericSubscription::enable_callbacks ( )
overridevirtual

Enable the callbacks to be called.

This method is thread safe, and provides a safe way to atomically enable the callbacks in a multithreaded environment.

Reimplemented from rclcpp::SubscriptionBase.

Definition at line 53 of file generic_subscription.cpp.

References rclcpp::AnySubscriptionCallback< MessageT, AllocatorT >::enable(), and rclcpp::SubscriptionBase::enable_callbacks().

Here is the call graph for this function:

◆ return_message()

void rclcpp::GenericSubscription::return_message ( std::shared_ptr< void > &  message)
overridevirtual

Return the message borrowed in create_message.

Parameters
[in]messageShared pointer to the returned message.

Implements rclcpp::SubscriptionBase.

Definition at line 91 of file generic_subscription.cpp.

References return_serialized_message().

Here is the call graph for this function:

◆ return_serialized_message()

void rclcpp::GenericSubscription::return_serialized_message ( std::shared_ptr< rclcpp::SerializedMessage > &  message)
overridevirtual

Return the message borrowed in create_serialized_message.

Parameters
[in]messageShared pointer to the returned message.

Implements rclcpp::SubscriptionBase.

Definition at line 98 of file generic_subscription.cpp.

Referenced by return_message().

Here is the caller graph for this function:

The documentation for this class was generated from the following files: