From 9bf3d0839a940279f34389995539cdd9dbfc9ea1 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Thu, 30 Apr 2015 16:38:12 -0700 Subject: [PATCH] Added SyncParametersClient --- rclcpp/include/rclcpp/parameter.hpp | 69 +++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/rclcpp/include/rclcpp/parameter.hpp b/rclcpp/include/rclcpp/parameter.hpp index e0f01a8..6c318fa 100644 --- a/rclcpp/include/rclcpp/parameter.hpp +++ b/rclcpp/include/rclcpp/parameter.hpp @@ -19,6 +19,7 @@ #include +#include #include #include @@ -156,6 +157,8 @@ class AsyncParametersClient { public: + RCLCPP_MAKE_SHARED_DEFINITIONS(AsyncParametersClient); + AsyncParametersClient(const rclcpp::node::Node::SharedPtr & node) : node_(node) { @@ -233,6 +236,72 @@ private: rclcpp::client::Client::SharedPtr describe_parameters_client_; }; +class SyncParametersClient +{ + friend class rclcpp::executor::Executor; + +public: + RCLCPP_MAKE_SHARED_DEFINITIONS(SyncParametersClient); + + SyncParametersClient( + rclcpp::node::Node::SharedPtr & node) + : node_(node) + { + executor_ = std::make_shared(); + async_parameters_client_ = std::make_shared(node); + } + + SyncParametersClient( + rclcpp::executor::Executor::SharedPtr & executor, + rclcpp::node::Node::SharedPtr & node) + : executor_(executor), node_(node) + { + async_parameters_client_ = std::make_shared(node); + } + + std::vector + get_parameters(std::vector parameter_names) + { + auto f = async_parameters_client_->get_parameters(parameter_names); + return rclcpp::executors::spin_node_until_future_complete(*executor_, node_, f).get(); + } + + std::vector + get_parameter_types(std::vector parameter_names) + { + auto f = async_parameters_client_->get_parameter_types(parameter_names); + return rclcpp::executors::spin_node_until_future_complete(*executor_, node_, f).get(); + } + + std::vector + set_parameters(std::vector parameters) + { + auto f = async_parameters_client_->set_parameters(parameters); + return rclcpp::executors::spin_node_until_future_complete(*executor_, node_, f).get(); + } + + rcl_interfaces::ParameterSetResult + set_parameters_atomically(std::vector parameters) + { + auto f = async_parameters_client_->set_parameters_atomically(parameters); + return rclcpp::executors::spin_node_until_future_complete(*executor_, node_, f).get(); + } + + rcl_interfaces::ParameterListResult + list_parameters( + std::vector parameter_prefixes, + uint64_t depth) + { + auto f = async_parameters_client_->list_parameters(parameter_prefixes, depth); + return rclcpp::executors::spin_node_until_future_complete(*executor_, node_, f).get(); + } + +private: + rclcpp::executor::Executor::SharedPtr executor_; + rclcpp::node::Node::SharedPtr node_; + AsyncParametersClient::SharedPtr async_parameters_client_; +}; + } /* namespace parameter */ } /* namespace rclcpp */