From 98cf3372f2ed4e61ccb0acc522549aaa3d18fd59 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Tue, 22 Oct 2024 14:24:32 +0200 Subject: Fixing interface deduction type --- modules/remote/c++/remote.hpp | 23 +++++++++++++++++++++-- modules/remote/c++/remote_loopback.hpp | 10 +++++----- modules/remote/c++/remote_loopback_base.hpp | 4 ++-- 3 files changed, 28 insertions(+), 9 deletions(-) (limited to 'modules/remote/c++') diff --git a/modules/remote/c++/remote.hpp b/modules/remote/c++/remote.hpp index 0f508f5..7e846d3 100644 --- a/modules/remote/c++/remote.hpp +++ b/modules/remote/c++/remote.hpp @@ -84,13 +84,32 @@ class rpc_client; namespace impl { template -struct tmpl_group_to_std_data_server_tuple; +struct tmpl_group_to_data_server_ptr_std_tuple; template -struct tmpl_group_to_std_data_server_ptr_tuple, Encoding, Remote> { +struct tmpl_group_to_data_server_ptr_std_tuple, Encoding, Remote> { using type = std::tuple>...>; }; } +template +class i_rpc_server { +protected: + virtual ~i_rpc_server() = default; +public: + virtual std::pair get_class_id() const = 0; + + template + error_or> cast_to(){ + { + auto rhs = get_class_id(); + if(To::class_id.first == rhs.first && To::class_id.second == rhs.second){ + return {ptr{*static_cast(this)}}; + } + } + + return make_error("Class IDs are not matching."); + } +}; /** * 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 8763b68..c651589 100644 --- a/modules/remote/c++/remote_loopback.hpp +++ b/modules/remote/c++/remote_loopback.hpp @@ -58,19 +58,19 @@ 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; + using DataServers = typename impl::tmpl_group_to_data_server_ptr_std_tuple::type; private: ptr> remote_; - const ptr> addr_; + ptr> addr_; InterfaceT iface_; DataServers dat_srvs_; public: - rpc_server(ptr> remote__, const remote_address& addr__, InterfaceT iface__, DataServers data_srvs__): + rpc_server(ptr> remote__, remote_address& addr__, InterfaceT iface__, DataServers dat_srvs__): remote_{remote__}, addr_{addr__}, iface_{std::move(iface__)}, - data_srvs_{data_srvs__} + dat_srvs_{dat_srvs__} {} template @@ -78,7 +78,7 @@ public: id< typename schema_member_type::type::Response > - > call(id::type::Request> id_param){ + > 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 5664f77..5e5e108 100644 --- a/modules/remote/c++/remote_loopback_base.hpp +++ b/modules/remote/c++/remote_loopback_base.hpp @@ -53,13 +53,13 @@ private: std::map>> registered_rpc_servers_; template - error_or find_data_servers_ele(typename rpc_server::DataServers>& ret_val){ + 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; + typename rpc_server::DataServers ret_val; -- cgit v1.2.3