From 6b3e1ac4a7767232289e993a8f21cfdff3cc9229 Mon Sep 17 00:00:00 2001 From: zhangyi1357 <34409786+zhangyi1357@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:11:41 +0800 Subject: [PATCH] fix: adjust context handling in ROS2 adapter RPC client and server (#138) * fix: adjust context handling in ROS2 adapter RPC client and server - Updated the context reservation in `ros2_adapter_rpc_client.cc` to accommodate an additional timeout value. - Modified the context parsing in `ros2_adapter_rpc_server.cc` to correctly handle the new timeout value and adjust the indexing for key-value pairs accordingly. * fix: enhance context handling for timeout in ROS2 adapter RPC client and server - Updated context reservation in `ros2_adapter_rpc_client.cc` to include an additional timeout entry. - Adjusted context parsing in `ros2_adapter_rpc_server.cc` to correctly set the timeout and handle key-value pairs more efficiently. --- src/plugins/ros2_plugin/ros2_adapter_rpc_client.cc | 4 +++- src/plugins/ros2_plugin/ros2_adapter_rpc_server.cc | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/plugins/ros2_plugin/ros2_adapter_rpc_client.cc b/src/plugins/ros2_plugin/ros2_adapter_rpc_client.cc index 73363e2bb..ec1f80e7f 100644 --- a/src/plugins/ros2_plugin/ros2_adapter_rpc_client.cc +++ b/src/plugins/ros2_plugin/ros2_adapter_rpc_client.cc @@ -245,7 +245,9 @@ void Ros2AdapterWrapperClient::Invoke( wrapper_req.serialization_type = serialization_type; const auto& keys = client_invoke_wrapper_ptr->ctx_ref.GetMetaKeys(); - wrapper_req.context.reserve(2 * keys.size()); + wrapper_req.context.reserve(2 * (keys.size() + 1)); + wrapper_req.context.emplace_back("aimrt-timeout"); + wrapper_req.context.emplace_back(std::to_string(client_invoke_wrapper_ptr->ctx_ref.Timeout().count())); for (const auto& key : keys) { wrapper_req.context.emplace_back(key); wrapper_req.context.emplace_back(client_invoke_wrapper_ptr->ctx_ref.GetMetaValue(key)); diff --git a/src/plugins/ros2_plugin/ros2_adapter_rpc_server.cc b/src/plugins/ros2_plugin/ros2_adapter_rpc_server.cc index 4eb4eee0e..1ee3087ce 100644 --- a/src/plugins/ros2_plugin/ros2_adapter_rpc_server.cc +++ b/src/plugins/ros2_plugin/ros2_adapter_rpc_server.cc @@ -204,10 +204,13 @@ void Ros2AdapterWrapperServer::handle_request( // 获取字段 auto& wrapper_req = *(static_cast(request.get())); - size_t context_size = wrapper_req.context.size() / 2; - for (size_t ii = 0; ii < context_size; ++ii) { - const auto& key = wrapper_req.context[ii * 2]; - const auto& val = wrapper_req.context[ii * 2 + 1]; + for (size_t ii = 0; ii + 1 < wrapper_req.context.size(); ii += 2) { + const auto& key = wrapper_req.context[ii]; + const auto& val = wrapper_req.context[ii + 1]; + if (ii == 0 && key == "aimrt-timeout") { + ctx_ptr->SetTimeout(std::chrono::nanoseconds(std::stoll(val))); + continue; + } ctx_ptr->SetMetaValue(key, val); }