15 #ifndef RCLCPP__SERVICE_HPP_    16 #define RCLCPP__SERVICE_HPP_    48     std::shared_ptr<rcl_node_t> node_handle,
    49     const std::string & service_name);
    53     std::shared_ptr<rcl_node_t> node_handle);
    69     std::shared_ptr<rmw_request_id_t> request_header,
    70     std::shared_ptr<void> request) = 0;
    88 template<
typename ServiceT>
    94         const std::shared_ptr<typename ServiceT::Request>,
    95         std::shared_ptr<typename ServiceT::Response>)>;
    99         const std::shared_ptr<rmw_request_id_t>,
   100         const std::shared_ptr<typename ServiceT::Request>,
   101         std::shared_ptr<typename ServiceT::Response>)>;
   106     const 
std::
string & service_name,
   109   : 
ServiceBase(node_handle, service_name), any_callback_(any_callback)
   111     using rosidl_typesupport_cpp::get_service_type_support_handle;
   112     auto service_type_support_handle = get_service_type_support_handle<ServiceT>();
   121       service_type_support_handle,
   122       service_name.c_str(),
   141     std::shared_ptr<rcl_node_t> node_handle,
   145     any_callback_(any_callback)
   151     if (!service_handle->
impl) {
   153       throw std::runtime_error(
   154         std::string(
"rcl_service_t in constructor argument must be initialized beforehand."));
   169         std::stringstream ss;
   170         ss << 
"Error in destruction of rcl service_handle_ handle: " <<
   172         (std::cerr << ss.str()).flush();
   180     return std::shared_ptr<void>(
new typename ServiceT::Request());
   191     std::shared_ptr<void> request)
   193     auto typed_request = std::static_pointer_cast<
typename ServiceT::Request>(request);
   194     auto response = std::shared_ptr<typename ServiceT::Response>(
new typename ServiceT::Response);
   195     any_callback_.dispatch(request_header, typed_request, response);
   196     send_response(request_header, response);
   200     std::shared_ptr<rmw_request_id_t> req_id,
   201     std::shared_ptr<typename ServiceT::Response> response)
   219 #endif  // RCLCPP__SERVICE_HPP_ const char * rcl_service_get_service_name(const rcl_service_t *service)
 
virtual std::shared_ptr< void > create_request()=0
 
rcl_ret_t rcl_service_init(rcl_service_t *service, const rcl_node_t *node, const rosidl_service_type_support_t *type_support, const char *service_name, const rcl_service_options_t *options)
 
std::function< void(const std::shared_ptr< rmw_request_id_t >, const std::shared_ptr< typename rcl_interfaces::srv::GetParameters ::Request >, std::shared_ptr< typename rcl_interfaces::srv::GetParameters ::Response >)> CallbackWithHeaderType
Definition: service.hpp:101
 
Definition: service.hpp:89
 
#define RCLCPP_DISABLE_COPY(...)
Definition: macros.hpp:26
 
Service(std::shared_ptr< rcl_node_t > node_handle, rcl_service_t *service_handle, AnyServiceCallback< ServiceT > any_callback)
Definition: service.hpp:140
 
struct rcl_service_impl_t * impl
 
Definition: allocator_common.hpp:24
 
Definition: parameter.hpp:235
 
bool owns_rcl_handle_
Definition: service.hpp:83
 
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. 
 
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. 
 
Definition: service.hpp:41
 
std::shared_ptr< rcl_node_t > node_handle_
Definition: service.hpp:79
 
rcl_ret_t rcl_send_response(const rcl_service_t *service, rmw_request_id_t *response_header, void *ros_response)
 
#define RCLCPP_SMART_PTR_DEFINITIONS(...)
Definition: macros.hpp:36
 
ServiceBase(std::shared_ptr< rcl_node_t > node_handle, const std::string &service_name)
 
rcl_node_t * get_rcl_node_handle() const
 
std::shared_ptr< void > create_request()
Definition: service.hpp:178
 
#define rcl_get_error_string_safe
 
rcl_ret_t rcl_service_fini(rcl_service_t *service, rcl_node_t *node)
 
#define RCLCPP_SMART_PTR_DEFINITIONS_NOT_COPYABLE(...)
Definition: macros.hpp:51
 
virtual std::shared_ptr< rmw_request_id_t > create_request_header()=0
 
#define RCLCPP_PUBLIC
Definition: visibility_control.hpp:50
 
std::shared_ptr< rmw_request_id_t > create_request_header()
Definition: service.hpp:183
 
const rcl_service_t * get_service_handle()
 
#define RCL_RET_SERVICE_NAME_INVALID
 
const char * rcl_node_get_name(const rcl_node_t *node)
 
virtual ~Service()
Definition: service.hpp:164
 
const char * rcl_node_get_namespace(const rcl_node_t *node)
 
void handle_request(std::shared_ptr< rmw_request_id_t > request_header, std::shared_ptr< void > request)
Definition: service.hpp:190
 
rcl_service_t rcl_get_zero_initialized_service(void)
 
void send_response(std::shared_ptr< rmw_request_id_t > req_id, std::shared_ptr< typename ServiceT::Response > response)
Definition: service.hpp:199
 
rcl_service_t * service_handle_
Definition: service.hpp:81
 
Definition: any_service_callback.hpp:34
 
std::function< void(const std::shared_ptr< typename ServiceT::Request >, std::shared_ptr< typename ServiceT::Response >)> CallbackType
Definition: service.hpp:95
 
virtual void handle_request(std::shared_ptr< rmw_request_id_t > request_header, std::shared_ptr< void > request)=0
 
std::string get_service_name()
 
std::string service_name_
Definition: service.hpp:82