From e4280959f1977663be70a2ac539e44f42aea0cd3 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Wed, 23 Oct 2024 15:30:16 +0200 Subject: Final stretch to have working rpc example --- modules/remote/c++/remote_loopback.hpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'modules/remote/c++/remote_loopback.hpp') diff --git a/modules/remote/c++/remote_loopback.hpp b/modules/remote/c++/remote_loopback.hpp index 0e9eb2d..8037b81 100644 --- a/modules/remote/c++/remote_loopback.hpp +++ b/modules/remote/c++/remote_loopback.hpp @@ -74,13 +74,29 @@ public: {} template - error_or< - id< - typename schema_member_type::type::ResponseT - > - > call(id::type::RequestT> id_param){ + error_or call(id::type::RequestT> id_param, id::type::ResponseT> id_resp){ + using Req = typename schema_member_type::type::RequestT; + auto req_dat_ptr = std::get>>(dat_srvs_); + auto eo_req_param = req_dat_ptr().find(id_param); + if(eo_req_param.is_error()){ + return std::move(eo_req_param.get_error()); + } + auto& req_param = eo_req_param.get_value(); + + auto eo_answer = iface_.template call(req_param()); + if(eo_answer.is_error()){ + return std::move(eo_answer.get_error()); + } + auto& answer = eo_answer.get_value(); + + using Resp = typename schema_member_type::type::ResponseT; + auto resp_dat_ptr = std::get>>(dat_srvs_); + auto eo_send = resp_dat_ptr().send(std::move(answer), id_resp); + if(eo_send.is_error()){ + return std::move(eo_send.get_error()); + } - return make_error(); + return make_void(); } }; -- cgit v1.2.3