summaryrefslogtreecommitdiff
path: root/modules/remote/c++/remote_loopback.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/remote/c++/remote_loopback.hpp')
-rw-r--r--modules/remote/c++/remote_loopback.hpp28
1 files changed, 22 insertions, 6 deletions
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<string_literal Lit>
- error_or<
- id<
- typename schema_member_type<Lit, Iface>::type::ResponseT
- >
- > call(id<typename schema_member_type<Lit, Iface>::type::RequestT> id_param){
+ error_or<void> call(id<typename schema_member_type<Lit, Iface>::type::RequestT> id_param, id<typename schema_member_type<Lit,Iface>::type::ResponseT> id_resp){
+ using Req = typename schema_member_type<Lit,Iface>::type::RequestT;
+ auto req_dat_ptr = std::get<ptr<data_server<Req,Encode,rmt::Loopback>>>(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<Lit>(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<Lit,Iface>::type::ResponseT;
+ auto resp_dat_ptr = std::get<ptr<data_server<Resp,Encode,rmt::Loopback>>>(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<err::not_implemented>();
+ return make_void();
}
};