Skip to content

Commit

Permalink
Refactored has_parameter to use has_parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
Esteve Fernandez committed Apr 16, 2015
1 parent 333cfe6 commit 8b8758d
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 8 deletions.
5 changes: 5 additions & 0 deletions rclcpp/include/rclcpp/node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,11 @@ class Node
const std::string& node_name, const parameter::ParameterQuery& query,
std::function<void(std::shared_future<bool>)> callback=nullptr);

std::shared_future< std::vector<bool> >
async_has_parameters(
const std::string& node_name, const std::vector< parameter::ParameterQuery > & queries,
std::function<void(std::shared_future< std::vector<bool> >)> callback=nullptr);

template <typename ParamTypeT>
std::shared_future<bool>
async_set_parameter(
Expand Down
44 changes: 36 additions & 8 deletions rclcpp/include/rclcpp/node_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ Node::async_get_parameters(
callback(future_result);
}
} else {
auto client = this->create_client<rcl_interfaces::GetParameters>("get_params");
auto client = this->create_client<rcl_interfaces::GetParameters>("get_parameters");
auto request = std::make_shared<rcl_interfaces::GetParameters::Request>();
for(auto parameter_name : parameter_names) {
rcl_interfaces::ParameterDescription description;
Expand Down Expand Up @@ -407,7 +407,7 @@ Node::async_set_parameters(
callback(future_result);
}
} else {
auto client = this->create_client<rcl_interfaces::SetParameters>("set_params");
auto client = this->create_client<rcl_interfaces::SetParameters>("set_parameters");
auto request = std::make_shared<rcl_interfaces::SetParameters::Request>();
for (auto kv: key_values) {
rcl_interfaces::Parameter parameter;
Expand Down Expand Up @@ -466,18 +466,46 @@ Node::async_has_parameter(
{
std::promise<bool> promise_result;
auto future_result = promise_result.get_future().share();
this->async_has_parameters(node_name, {{ query }},
[&promise_result, &future_result, &callback] (
std::shared_future< std::vector<bool> > cb_f) {
promise_result.set_value(cb_f.get()[0]);
if (callback != nullptr) {
callback(future_result);
}
}
);
return future_result;
}

std::shared_future< std::vector<bool> >
Node::async_has_parameters(
const std::string& node_name, const std::vector< parameter::ParameterQuery > & queries,
std::function<void(std::shared_future< std::vector<bool> >)> callback)
{
std::promise< std::vector<bool> > promise_result;
auto future_result = promise_result.get_future().share();
if (node_name == this->get_name()) {
promise_result.set_value(this->has_parameter(query));
std::vector<bool> value;
for (auto query: queries) {
value.push_back(this->has_parameter(query));
}
promise_result.set_value(value);
if (callback != nullptr) {
callback(future_result);
}
} else {
auto client = this->create_client<rcl_interfaces::HasParameters>("has_params");
auto client = this->create_client<rcl_interfaces::HasParameters>("has_parameters");
auto request = std::make_shared<rcl_interfaces::HasParameters::Request>();
rcl_interfaces::ParameterDescription parameter_description;
parameter_description.name = query.get_name();
request->parameter_descriptions.push_back(parameter_description);
for (auto query: queries) {
rcl_interfaces::ParameterDescription parameter_description;
parameter_description.name = query.get_name();
request->parameter_descriptions.push_back(parameter_description);
}
client->async_send_request(
request, [&promise_result, &future_result, &callback] (
rclcpp::client::Client<rcl_interfaces::HasParameters>::SharedFuture cb_f) {
promise_result.set_value(cb_f.get()->result[0]);
promise_result.set_value(cb_f.get()->result);
if (callback != nullptr) {
callback(future_result);
}
Expand Down

0 comments on commit 8b8758d

Please sign in to comment.