diff options
Diffstat (limited to 'modules/remote/c++')
-rw-r--r-- | modules/remote/c++/remote.hpp | 10 | ||||
-rw-r--r-- | modules/remote/c++/remote_loopback.hpp | 27 | ||||
-rw-r--r-- | modules/remote/c++/remote_loopback_base.hpp | 20 |
3 files changed, 48 insertions, 9 deletions
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<typename Iface, typename Encoding, typename Remote> class rpc_client; +namespace impl { +template<typename T, typename Encoding, typename Remote> +struct tmpl_group_to_std_data_server_tuple; + +template<typename... T, typename Encoding, typename Remote> +struct tmpl_group_to_std_data_server_ptr_tuple<tmpl_group<T...>, Encoding, Remote> { + using type = std::tuple<ptr<data_server<T,Encoding,Remote>>...>; +}; +} + /** * 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<Iface, Encoding, rmt::Loopback> { */ }; - template<typename Iface, typename Encode> class rpc_server<Iface, Encode, rmt::Loopback> { public: using InterfaceT = interface<Iface, Encode>; + using TypeGroup = typename schema_iface_type_group<Iface>::Type; + using DataServers = typename impl::tmpl_group_to_data_server_ptr_std_tuple<TypeGroup>::type; private: - const remote_address<rmt::Loopback>* addr_; + ptr<remote<rmt::Loopback>> remote_; + const ptr<remote_address<rmt::Loopback>> addr_; InterfaceT iface_; + DataServers dat_srvs_; + public: - rpc_server(const remote_address<rmt::Loopback>& addr__, InterfaceT iface__): - addr_{&addr__}, - iface_{std::move(iface__)} + rpc_server(ptr<remote<rmt::Loopback>> remote__, const remote_address<rmt::Loopback>& addr__, InterfaceT iface__, DataServers data_srvs__): + remote_{remote__}, + addr_{addr__}, + iface_{std::move(iface__)}, + data_srvs_{data_srvs__} {} - // error_or<id<>> - // conveyor<> call + template<string_literal Lit> + error_or< + id< + typename schema_member_type<Lit, Iface>::type::Response + > + > call(id<schema_member_type<Lit, Iface>::type::Request> id_param){ + + return make_error<err::not_implemented>(); + } }; } 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<key_t, ptr<i_data_server<rmt::Loopback>>> registered_data_servers_; + std::map<key_t, ptr<i_rpc_server<rmt::Loopback>>> registered_rpc_servers_; + + template<typename Iface, typename Encoding, uint64_t I> + error_or<void> find_data_servers_ele(typename rpc_server<Iface,Encoding,rmt::Loopback>::DataServers>& ret_val){ + + } + + template<typename Iface, typename Encoding> + error_or<typename rpc_server<Iface, Encoding, rmt::Loopback>::DataServers> find_data_servers(){ + typename rpc_server<Iface,Encoding,rmt::Loopback>::DataServers> ret_val; + + + + return ret_val; + } public: /** * Resolves an address for the remote @@ -68,8 +83,9 @@ public: * Start listening */ template<typename Iface, typename Encode> - rpc_server<Iface, Encode, rmt::Loopback> rpc_listen(const remote_address<rmt::Loopback>& addr, typename rpc_server<Iface,Encode,rmt::Loopback>::InterfaceT iface){ - return {addr, std::move(iface)}; + error_or<own<rpc_server<Iface, Encode, rmt::Loopback>>> rpc_listen(const remote_address<rmt::Loopback>& addr, typename rpc_server<Iface,Encode,rmt::Loopback>::InterfaceT iface){ + + return heap<rpc_server<Iface,Encode,rmt::Loopback>>({*this}, addr, std::move(iface)); } /** |