15 #ifndef RCLCPP__SUBSCRIPTION_HPP_    16 #define RCLCPP__SUBSCRIPTION_HPP_    30 #include "rcl_interfaces/msg/intra_process_message.hpp"    44 namespace node_interfaces
    46 class NodeTopicsInterface;
    67     const rosidl_message_type_support_t & type_support_handle,
    70     bool is_serialized = 
false);
    74   virtual ~SubscriptionBase();
    79   get_topic_name() 
const;
    83   get_subscription_handle();
    87   get_subscription_handle() 
const;
    91   get_intra_process_subscription_handle() 
const;
   101   create_serialized_message() = 0;
   122   handle_intra_process_message(
   123     rcl_interfaces::msg::IntraProcessMessage & ipm,
   126   const rosidl_message_type_support_t &
   127   get_message_type_support_handle() 
const;
   130   is_serialized() 
const;
   140   rosidl_message_type_support_t type_support_;
   146   typename CallbackMessageT,
   173     const rosidl_message_type_support_t & type_support_handle,
   174     const 
std::
string & topic_name,
   177     typename message_memory_strategy::MessageMemoryStrategy<CallbackMessageT, Alloc>::SharedPtr
   178     memory_strategy = message_memory_strategy::MessageMemoryStrategy<CallbackMessageT,
   179     Alloc>::create_default())
   184       subscription_options,
   185       rclcpp::subscription_traits::is_serialized_subscription_argument<CallbackMessageT>::value),
   186     any_callback_(callback),
   187     message_memory_strategy_(memory_strategy),
   188     get_intra_process_message_callback_(
nullptr),
   189     matches_any_intra_process_publishers_(
nullptr)
   199     Alloc>::SharedPtr message_memory_strategy)
   201     message_memory_strategy_ = message_memory_strategy;
   210     return message_memory_strategy_->borrow_message();
   215     return message_memory_strategy_->borrow_serialized_message();
   220     if (matches_any_intra_process_publishers_) {
   221       if (matches_any_intra_process_publishers_(&message_info.
publisher_gid)) {
   228     any_callback_.dispatch(typed_message, message_info);
   236     message_memory_strategy_->return_message(typed_message);
   241     message_memory_strategy_->return_serialized_message(message);
   245     rcl_interfaces::msg::IntraProcessMessage & ipm,
   248     if (!get_intra_process_message_callback_) {
   256     get_intra_process_message_callback_(
   258       ipm.message_sequence,
   259       intra_process_subscription_id_,
   267     any_callback_.dispatch_intra_process(msg, message_info);
   276     uint64_t intra_process_subscription_id,
   283       intra_process_subscription_handle_.get(),
   286       intra_process_topic_name.
c_str(),
   287       &intra_process_options);
   290         auto rcl_node_handle = node_handle_.get();
   294           intra_process_topic_name,
   302     intra_process_subscription_id_ = intra_process_subscription_id;
   303     get_intra_process_message_callback_ = get_message_callback;
   304     matches_any_intra_process_publishers_ = matches_any_publisher_callback;
   311     if (!get_intra_process_message_callback_) {
   314     return intra_process_subscription_handle_;
   322     message_memory_strategy_;
   326   uint64_t intra_process_subscription_id_;
   331 #endif  // RCLCPP__SUBSCRIPTION_HPP_ Default allocation strategy for messages received by subscriptions. 
Definition: message_memory_strategy.hpp:40
 
std::shared_ptr< rcl_subscription_t > subscription_handle_
Definition: subscription.hpp:134
 
#define RCLCPP_DISABLE_COPY(...)
Definition: macros.hpp:26
 
std::shared_ptr< rcl_serialized_message_t > create_serialized_message()
Borrow a new serialized message. 
Definition: subscription.hpp:213
 
void return_message(std::shared_ptr< void > &message)
Return the loaned message. 
Definition: subscription.hpp:233
 
Definition: allocator_common.hpp:24
 
rcl_ret_t rcl_subscription_init(rcl_subscription_t *subscription, const rcl_node_t *node, const rosidl_message_type_support_t *type_support, const char *topic_name, const rcl_subscription_options_t *options)
 
void handle_message(std::shared_ptr< void > &message, const rmw_message_info_t &message_info)
Check if we need to handle the message, and execute the callback if we do. 
Definition: subscription.hpp:218
 
std::string expand_topic_or_service_name(const std::string &name, const std::string &node_name, const std::string &namespace_, bool is_service=false)
Expand a topic or service name and throw if it is not valid. 
 
allocator::Deleter< MessageAlloc, CallbackMessageT > MessageDeleter
Definition: subscription.hpp:155
 
Subscription implementation, templated on the type of message this subscription receives. 
Definition: subscription.hpp:148
 
void handle_intra_process_message(rcl_interfaces::msg::IntraProcessMessage &ipm, const rmw_message_info_t &message_info)
Definition: subscription.hpp:244
 
typename MessageAllocTraits::allocator_type MessageAlloc
Definition: subscription.hpp:154
 
void throw_from_rcl_error(rcl_ret_t ret, const std::string &prefix="", const rcl_error_state_t *error_state=nullptr, void(*reset_error)()=rcl_reset_error)
Throw a C++ std::exception which was created based on an rcl error. 
 
std::shared_ptr< rcl_subscription_t > intra_process_subscription_handle_
Definition: subscription.hpp:133
 
typename std::allocator_traits< Alloc >::template rebind_traits< T > AllocRebind
Definition: allocator_common.hpp:30
 
const rosidl_message_type_support_t * get_intra_process_message_msg_type_support()
 
Definition: any_subscription_callback.hpp:34
 
#define RCLCPP_SMART_PTR_DEFINITIONS(...)
Definition: macros.hpp:36
 
std::shared_ptr< void > create_message()
Borrow a new message. 
Definition: subscription.hpp:204
 
allocator::AllocRebind< CallbackMessageT, Alloc > MessageAllocTraits
Definition: subscription.hpp:153
 
void return_serialized_message(std::shared_ptr< rcl_serialized_message_t > &message)
Return the message borrowed in create_serialized_message. 
Definition: subscription.hpp:239
 
T static_pointer_cast(T... args)
 
#define RCLCPP_SMART_PTR_DEFINITIONS_NOT_COPYABLE(...)
Definition: macros.hpp:51
 
std::shared_ptr< rcl_node_t > node_handle_
Definition: subscription.hpp:135
 
const std::shared_ptr< rcl_subscription_t > get_intra_process_subscription_handle() const
Implemenation detail. 
Definition: subscription.hpp:309
 
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
 
Pure virtual interface class for the NodeTopics part of the Node API. 
Definition: node_topics_interface.hpp:38
 
Definition: subscription.hpp:51
 
#define RCL_RET_TOPIC_NAME_INVALID
 
const char * rcl_node_get_name(const rcl_node_t *node)
 
const char * rcl_node_get_namespace(const rcl_node_t *node)
 
typename std::conditional< std::is_same< typename std::allocator_traits< Alloc >::template rebind_alloc< T >, typename std::allocator< void >::template rebind< T >::other >::value, std::default_delete< T >, AllocatorDeleter< Alloc > >::type Deleter
Definition: allocator_deleter.hpp:101
 
void set_message_memory_strategy(typename message_memory_strategy::MessageMemoryStrategy< CallbackMessageT, Alloc >::SharedPtr message_memory_strategy)
Support dynamically setting the message memory strategy. 
Definition: subscription.hpp:197
 
void setup_intra_process(uint64_t intra_process_subscription_id, GetMessageCallbackType get_message_callback, MatchesAnyPublishersCallbackType matches_any_publisher_callback, const rcl_subscription_options_t &intra_process_options)
Implemenation detail. 
Definition: subscription.hpp:275