15 #ifndef RCLCPP__PUBLISHER_HPP_ 16 #define RCLCPP__PUBLISHER_HPP_ 30 #include "rcl_interfaces/msg/intra_process_message.hpp" 43 namespace node_interfaces
45 class NodeTopicsInterface;
71 const rosidl_message_type_support_t & type_support,
75 virtual ~PublisherBase();
81 get_topic_name()
const;
87 get_queue_size()
const;
99 get_intra_process_gid()
const;
105 get_publisher_handle();
111 get_publisher_handle()
const;
139 uint64_t intra_process_publisher_id,
157 template<
typename MessageT,
typename Alloc = std::allocator<
void>>
169 rclcpp::node_interfaces::NodeBaseInterface * node_base,
170 const
std::
string & topic,
176 *rosidl_typesupport_cpp::get_message_type_support_handle<MessageT>(),
178 message_allocator_(allocator)
194 this->do_inter_process_publish(msg.
get());
195 if (store_intra_process_message_) {
203 MessageT * msg_ptr = msg.
get();
205 uint64_t message_seq =
206 store_intra_process_message_(intra_process_publisher_id_, msg_ptr,
typeid(MessageT));
207 rcl_interfaces::msg::IntraProcessMessage ipm;
208 ipm.publisher_id = intra_process_publisher_id_;
209 ipm.message_sequence = message_seq;
210 auto status =
rcl_publish(&intra_process_publisher_handle_, &ipm);
227 if (!store_intra_process_message_) {
229 return this->do_inter_process_publish(msg.
get());
236 auto ptr = MessageAllocTraits::allocate(*message_allocator_.get(), 1);
237 MessageAllocTraits::construct(*message_allocator_.get(), ptr, *msg.
get());
239 return this->publish(unique_msg);
246 if (!store_intra_process_message_) {
248 return this->do_inter_process_publish(msg.
get());
255 auto ptr = MessageAllocTraits::allocate(*message_allocator_.get(), 1);
256 MessageAllocTraits::construct(*message_allocator_.get(), ptr, *msg.
get());
258 return this->publish(unique_msg);
265 if (!store_intra_process_message_) {
267 return this->do_inter_process_publish(&msg);
270 auto ptr = MessageAllocTraits::allocate(*message_allocator_.get(), 1);
271 MessageAllocTraits::construct(*message_allocator_.get(), ptr, msg);
273 return this->publish(unique_msg);
282 return this->publish(*msg);
287 return message_allocator_;
294 auto status =
rcl_publish(&publisher_handle_, msg);
312 #endif // RCLCPP__PUBLISHER_HPP_
uint64_t intra_process_publisher_id_
Definition: publisher.hpp:149
MessageDeleter message_deleter_
Definition: publisher.hpp:305
Definition: allocator_common.hpp:24
virtual void publish(std::unique_ptr< MessageT, MessageDeleter > &msg)
Send a message to the topic for this publisher.
Definition: publisher.hpp:192
Definition: publisher.hpp:51
virtual ~Publisher()
Definition: publisher.hpp:183
std::shared_ptr< MessageAlloc > message_allocator_
Definition: publisher.hpp:303
std::shared_ptr< rcl_node_t > rcl_node_handle_
Definition: publisher.hpp:144
void set_allocator_for_deleter(D *deleter, Alloc *alloc)
Definition: allocator_deleter.hpp:72
allocator::Deleter< MessageAlloc, rcl_interfaces::msg::ParameterEvent > MessageDeleter
Definition: publisher.hpp:163
typename MessageAllocTraits::allocator_type MessageAlloc
Definition: publisher.hpp:162
typename std::allocator_traits< Alloc >::template rebind_traits< T > AllocRebind
Definition: allocator_common.hpp:30
rcl_publisher_t rcl_get_zero_initialized_publisher(void)
#define RCLCPP_SMART_PTR_DEFINITIONS(...)
Definition: macros.hpp:36
std::shared_ptr< MessageAlloc > get_allocator() const
Definition: publisher.hpp:285
StoreMessageCallbackT store_intra_process_message_
Definition: publisher.hpp:150
Pure virtual interface class for the NodeBase part of the Node API.
Definition: node_base_interface.hpp:36
#define rcl_get_error_string_safe
rmw_gid_t rmw_gid_
Definition: publisher.hpp:152
virtual void publish(std::shared_ptr< const MessageT > msg)
Definition: publisher.hpp:243
#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
rmw_gid_t intra_process_rmw_gid_
Definition: publisher.hpp:153
virtual void publish(const MessageT &msg)
Definition: publisher.hpp:262
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 do_inter_process_publish(const MessageT *msg)
Definition: publisher.hpp:292
allocator::AllocRebind< rcl_interfaces::msg::ParameterEvent, std::allocator< void > > MessageAllocTraits
Definition: publisher.hpp:161
rcl_ret_t rcl_publish(const rcl_publisher_t *publisher, const void *ros_message)
virtual void publish(const MessageT *msg)
Definition: publisher.hpp:277
A publisher publishes messages of any type to a topic.
Definition: publisher.hpp:158
virtual void publish(const std::shared_ptr< MessageT > &msg)
Definition: publisher.hpp:224