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); }