diff --git a/rclcpp/services/minimal_client/CMakeLists.txt b/rclcpp/services/minimal_client/CMakeLists.txt index acd6ec1a..3194adaa 100644 --- a/rclcpp/services/minimal_client/CMakeLists.txt +++ b/rclcpp/services/minimal_client/CMakeLists.txt @@ -14,15 +14,19 @@ find_package(ament_cmake REQUIRED) find_package(example_interfaces REQUIRED) find_package(rclcpp REQUIRED) -add_executable(client_not_composable not_composable.cpp) -ament_target_dependencies(client_not_composable rclcpp example_interfaces) +add_executable(client_lambda lambda.cpp) +ament_target_dependencies(client_lambda rclcpp example_interfaces) add_executable(client_member_function member_function.cpp) ament_target_dependencies(client_member_function rclcpp example_interfaces) +add_executable(client_not_composable not_composable.cpp) +ament_target_dependencies(client_not_composable rclcpp example_interfaces) + install(TARGETS - client_not_composable + client_lambda client_member_function + client_not_composable DESTINATION lib/${PROJECT_NAME}) if(BUILD_TESTING) diff --git a/rclcpp/services/minimal_client/lambda.cpp b/rclcpp/services/minimal_client/lambda.cpp new file mode 100644 index 00000000..f203de9f --- /dev/null +++ b/rclcpp/services/minimal_client/lambda.cpp @@ -0,0 +1,67 @@ +// Copyright 2016 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "example_interfaces/srv/add_two_ints.hpp" +#include "rclcpp/rclcpp.hpp" + +using namespace std::chrono_literals; +using example_interfaces::srv::AddTwoInts; + +/* This example creates a subclass of Node and uses std::bind() to register a + * member function as a callback from the client. */ + +class MinimalClient : public rclcpp::Node +{ +public: + MinimalClient() + : Node("minimal_client") + { + client_ = this->create_client("add_two_ints"); + while (!client_->wait_for_service(1s)) { + if (!rclcpp::ok()) { + RCLCPP_ERROR(this->get_logger(), "client interrupted while waiting for service to appear."); + } + RCLCPP_INFO(this->get_logger(), "waiting for service to appear..."); + } + auto request = std::make_shared(); + request->a = 41; + request->b = 1; + auto result_future = client_->async_send_request( + request, + [this](rclcpp::Client::SharedFutureWithRequest result_future) { + auto result = result_future.get(); + auto request = result.first; + auto response = result.second; + RCLCPP_INFO( + this->get_logger(), "result of %" PRId64 " + %" PRId64 " = %" PRId64, + request->a, request->b, response->sum); + rclcpp::shutdown(); + }); + } + +private: + rclcpp::Client::SharedPtr client_; +}; + +int main(int argc, char * argv[]) +{ + rclcpp::init(argc, argv); + rclcpp::spin(std::make_shared()); + rclcpp::shutdown(); + return 0; +} diff --git a/rclcpp/services/minimal_service/CMakeLists.txt b/rclcpp/services/minimal_service/CMakeLists.txt index 651f2371..e01d76a3 100644 --- a/rclcpp/services/minimal_service/CMakeLists.txt +++ b/rclcpp/services/minimal_service/CMakeLists.txt @@ -25,8 +25,8 @@ ament_target_dependencies(service_not_composable rclcpp example_interfaces) install(TARGETS service_lambda - service_not_composable service_member_function + service_not_composable DESTINATION lib/${PROJECT_NAME}) if(BUILD_TESTING) diff --git a/rclcpp/services/minimal_service/lambda.cpp b/rclcpp/services/minimal_service/lambda.cpp index 8bd5ac30..cd820ade 100644 --- a/rclcpp/services/minimal_service/lambda.cpp +++ b/rclcpp/services/minimal_service/lambda.cpp @@ -13,7 +13,6 @@ // limitations under the License. #include -#include #include #include "example_interfaces/srv/add_two_ints.hpp" diff --git a/rclcpp/services/minimal_service/member_function.cpp b/rclcpp/services/minimal_service/member_function.cpp index d8090934..02ffca77 100644 --- a/rclcpp/services/minimal_service/member_function.cpp +++ b/rclcpp/services/minimal_service/member_function.cpp @@ -13,7 +13,6 @@ // limitations under the License. #include -#include #include #include "example_interfaces/srv/add_two_ints.hpp" diff --git a/rclcpp/topics/minimal_publisher/member_function.cpp b/rclcpp/topics/minimal_publisher/member_function.cpp index b211a5eb..1843f818 100644 --- a/rclcpp/topics/minimal_publisher/member_function.cpp +++ b/rclcpp/topics/minimal_publisher/member_function.cpp @@ -13,7 +13,6 @@ // limitations under the License. #include -#include #include #include diff --git a/rclcpp/topics/minimal_publisher/member_function_with_type_adapter.cpp b/rclcpp/topics/minimal_publisher/member_function_with_type_adapter.cpp index 39c1007a..e8fadd5a 100644 --- a/rclcpp/topics/minimal_publisher/member_function_with_type_adapter.cpp +++ b/rclcpp/topics/minimal_publisher/member_function_with_type_adapter.cpp @@ -13,7 +13,6 @@ // limitations under the License. #include -#include #include #include diff --git a/rclcpp/topics/minimal_publisher/member_function_with_unique_network_flow_endpoints.cpp b/rclcpp/topics/minimal_publisher/member_function_with_unique_network_flow_endpoints.cpp index 71437e9e..3295892d 100644 --- a/rclcpp/topics/minimal_publisher/member_function_with_unique_network_flow_endpoints.cpp +++ b/rclcpp/topics/minimal_publisher/member_function_with_unique_network_flow_endpoints.cpp @@ -13,7 +13,6 @@ // limitations under the License. #include -#include #include #include #include diff --git a/rclcpp/topics/minimal_subscriber/member_function.cpp b/rclcpp/topics/minimal_subscriber/member_function.cpp index 902ec0a1..762e65e8 100644 --- a/rclcpp/topics/minimal_subscriber/member_function.cpp +++ b/rclcpp/topics/minimal_subscriber/member_function.cpp @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include #include #include "rclcpp/rclcpp.hpp" diff --git a/rclcpp/topics/minimal_subscriber/member_function_with_type_adapter.cpp b/rclcpp/topics/minimal_subscriber/member_function_with_type_adapter.cpp index bb9c8925..5f292089 100644 --- a/rclcpp/topics/minimal_subscriber/member_function_with_type_adapter.cpp +++ b/rclcpp/topics/minimal_subscriber/member_function_with_type_adapter.cpp @@ -12,7 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include #include #include diff --git a/rclcpp/topics/minimal_subscriber/member_function_with_unique_network_flow_endpoints.cpp b/rclcpp/topics/minimal_subscriber/member_function_with_unique_network_flow_endpoints.cpp index 5a008014..247fc367 100644 --- a/rclcpp/topics/minimal_subscriber/member_function_with_unique_network_flow_endpoints.cpp +++ b/rclcpp/topics/minimal_subscriber/member_function_with_unique_network_flow_endpoints.cpp @@ -12,8 +12,6 @@ // See the License for the specific language governing permissions and // limitations under the License. - -#include #include #include #include