From f2a1a3f56768d9aa03796808206f067daa5e0aa0 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Mon, 21 Oct 2024 17:52:46 +0200 Subject: Working towards proper rpc reference example --- modules/remote/c++/remote.hpp | 10 ++++++++++ modules/remote/c++/remote_loopback.hpp | 27 ++++++++++++++++++++------- modules/remote/c++/remote_loopback_base.hpp | 20 ++++++++++++++++++-- 3 files changed, 48 insertions(+), 9 deletions(-) (limited to 'modules/remote/c++') diff --git a/modules/remote/c++/remote.hpp b/modules/remote/c++/remote.hpp index 807213e..0f508f5 100644 --- a/modules/remote/c++/remote.hpp +++ b/modules/remote/c++/remote.hpp @@ -82,6 +82,16 @@ class remote_data; template class rpc_client; +namespace impl { +template +struct tmpl_group_to_std_data_server_tuple; + +template +struct tmpl_group_to_std_data_server_ptr_tuple, Encoding, Remote> { + using type = std::tuple>...>; +}; +} + /** * Implementation of a remote server on the backend */ diff --git a/modules/remote/c++/remote_loopback.hpp b/modules/remote/c++/remote_loopback.hpp index 308bdc6..8763b68 100644 --- a/modules/remote/c++/remote_loopback.hpp +++ b/modules/remote/c++/remote_loopback.hpp @@ -53,22 +53,35 @@ class rpc_client { */ }; - template class rpc_server { public: using InterfaceT = interface; + using TypeGroup = typename schema_iface_type_group::Type; + using DataServers = typename impl::tmpl_group_to_data_server_ptr_std_tuple::type; private: - const remote_address* addr_; + ptr> remote_; + const ptr> addr_; InterfaceT iface_; + DataServers dat_srvs_; + public: - rpc_server(const remote_address& addr__, InterfaceT iface__): - addr_{&addr__}, - iface_{std::move(iface__)} + rpc_server(ptr> remote__, const remote_address& addr__, InterfaceT iface__, DataServers data_srvs__): + remote_{remote__}, + addr_{addr__}, + iface_{std::move(iface__)}, + data_srvs_{data_srvs__} {} - // error_or> - // conveyor<> call + template + error_or< + id< + typename schema_member_type::type::Response + > + > call(id::type::Request> id_param){ + + return make_error(); + } }; } diff --git a/modules/remote/c++/remote_loopback_base.hpp b/modules/remote/c++/remote_loopback_base.hpp index 6ca244f..5664f77 100644 --- a/modules/remote/c++/remote_loopback_base.hpp +++ b/modules/remote/c++/remote_loopback_base.hpp @@ -50,6 +50,21 @@ private: }; std::map>> registered_data_servers_; + std::map>> registered_rpc_servers_; + + template + error_or find_data_servers_ele(typename rpc_server::DataServers>& ret_val){ + + } + + template + error_or::DataServers> find_data_servers(){ + typename rpc_server::DataServers> ret_val; + + + + return ret_val; + } public: /** * Resolves an address for the remote @@ -68,8 +83,9 @@ public: * Start listening */ template - rpc_server rpc_listen(const remote_address& addr, typename rpc_server::InterfaceT iface){ - return {addr, std::move(iface)}; + error_or>> rpc_listen(const remote_address& addr, typename rpc_server::InterfaceT iface){ + + return heap>({*this}, addr, std::move(iface)); } /** -- cgit v1.2.3