15 #ifndef RCLCPP__CLIENT_HPP_    16 #define RCLCPP__CLIENT_HPP_    47 namespace node_interfaces
    49 class NodeBaseInterface;
    60     rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph);
    81   template<
typename RatioT = std::milli>
    87       std::chrono::duration_cast<std::chrono::nanoseconds>(timeout)
   117 template<
typename ServiceT>
   139     rclcpp::node_interfaces::NodeBaseInterface * node_base,
   140     rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph,
   141     const 
std::
string & service_name,
   145     using rosidl_typesupport_cpp::get_service_type_support_handle;
   146     auto service_type_support_handle =
   147       get_service_type_support_handle<ServiceT>();
   151       service_type_support_handle,
   152       service_name.c_str(),
   194     int64_t sequence_number = request_header->sequence_number;
   196     if (this->pending_requests_.count(sequence_number) == 0) {
   199         "Received invalid sequence number. Ignoring...");
   202     auto tuple = this->pending_requests_[sequence_number];
   203     auto call_promise = std::get<0>(tuple);
   204     auto callback = std::get<1>(tuple);
   205     auto future = std::get<2>(tuple);
   206     this->pending_requests_.erase(sequence_number);
   210     call_promise->set_value(typed_response);
   233     int64_t sequence_number;
   241     pending_requests_[sequence_number] =
   261     auto wrapping_cb = [future_with_request, promise, request, &cb](
SharedFuture future) {
   262         auto response = future.
get();
   264         cb(future_with_request);
   269     return future_with_request;
   281 #endif  // RCLCPP__CLIENT_HPP_ 
SharedFuture async_send_request(SharedRequest request)
Definition: client.hpp:215
 
#define RCLCPP_DISABLE_COPY(...)
Definition: macros.hpp:26
 
typename rcl_interfaces::srv::GetParameters ::Request::SharedPtr SharedRequest
Definition: client.hpp:121
 
void handle_response(std::shared_ptr< rmw_request_id_t > request_header, std::shared_ptr< void > response)
Definition: client.hpp:188
 
std::shared_ptr< rcl_client_t > client_handle_
Definition: client.hpp:114
 
Definition: client.hpp:118
 
virtual ~Client()
Definition: client.hpp:169
 
Definition: allocator_common.hpp:24
 
std::shared_ptr< rcl_client_t > get_client_handle()
 
const char * get_service_name() const
 
virtual std::shared_ptr< rmw_request_id_t > create_request_header()=0
 
rcl_node_t * get_rcl_node_handle()
 
rcl_ret_t rcl_send_request(const rcl_client_t *client, const void *ros_request, int64_t *sequence_number)
 
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. 
 
bool wait_for_service_nanoseconds(std::chrono::nanoseconds timeout)
 
rclcpp::node_interfaces::NodeGraphInterface::WeakPtr node_graph_
Definition: client.hpp:111
 
SharedFuture async_send_request(SharedRequest request, CallbackT &&cb)
Definition: client.hpp:230
 
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< rmw_request_id_t > create_request_header()
Definition: client.hpp:180
 
std::shared_ptr< void > create_response()
Definition: client.hpp:174
 
rcl_ret_t rcl_client_init(rcl_client_t *client, const rcl_node_t *node, const rosidl_service_type_support_t *type_support, const char *service_name, const rcl_client_options_t *options)
 
#define RCLCPP_SMART_PTR_DEFINITIONS(...)
Definition: macros.hpp:36
 
std::shared_ptr< rcl_node_t > node_handle_
Definition: client.hpp:112
 
typename rcl_interfaces::srv::GetParameters ::Response::SharedPtr SharedResponse
Definition: client.hpp:122
 
std::shared_future< std::pair< SharedRequest, SharedResponse > > SharedFutureWithRequest
Definition: client.hpp:131
 
ClientBase(rclcpp::node_interfaces::NodeBaseInterface *node_base, rclcpp::node_interfaces::NodeGraphInterface::SharedPtr node_graph)
 
Definition: function_traits.hpp:143
 
T static_pointer_cast(T... args)
 
#define RCLCPP_SMART_PTR_DEFINITIONS_NOT_COPYABLE(...)
Definition: macros.hpp:51
 
std::function< void(SharedFutureWithRequest)> CallbackWithRequestType
Definition: client.hpp:134
 
#define RCUTILS_LOG_ERROR_NAMED(name,...)
 
std::function< void(SharedFuture)> CallbackType
Definition: client.hpp:133
 
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
 
Pure virtual interface class for the NodeBase part of the Node API. 
Definition: node_base_interface.hpp:36
 
#define RCL_RET_SERVICE_NAME_INVALID
 
const char * rcl_node_get_name(const rcl_node_t *node)
 
virtual void handle_response(std::shared_ptr< rmw_request_id_t > request_header, std::shared_ptr< void > response)=0
 
const char * rcl_node_get_namespace(const rcl_node_t *node)
 
std::shared_future< SharedResponse > SharedFuture
Definition: client.hpp:130
 
SharedFutureWithRequest async_send_request(SharedRequest request, CallbackT &&cb)
Definition: client.hpp:256
 
bool service_is_ready() const
 
Definition: client.hpp:52
 
bool wait_for_service(std::chrono::duration< int64_t, RatioT > timeout=std::chrono::duration< int64_t, RatioT >(-1))
Definition: client.hpp:83
 
virtual std::shared_ptr< void > create_response()=0