From 44f6a2ec37e35cf96419885be27afeab9ea84ec5 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Mon, 29 Jul 2024 14:53:48 +0200 Subject: wip --- modules/remote/c++/remote_loopback_base.hpp | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'modules/remote/c++/remote_loopback_base.hpp') diff --git a/modules/remote/c++/remote_loopback_base.hpp b/modules/remote/c++/remote_loopback_base.hpp index 823c516..660180d 100644 --- a/modules/remote/c++/remote_loopback_base.hpp +++ b/modules/remote/c++/remote_loopback_base.hpp @@ -1,7 +1,70 @@ #pragma once +#include "remote.hpp" + +#include + namespace saw { namespace rmt { struct Loopback {}; } + +template<> +class remote { +private: + std::map>> registered_data_servers_; +public: + /** + * Resolves an address for the remote + */ + error_or>> parse_address(data id){ + return heap>(id); + } + + /** + * Connect to a remote + */ + template + conveyor> connect(const remote_address& addr); + + /** + * Start listening + */ + template + rpc_server listen(const remote_address& addr, typename rpc_server::InterfaceT iface){ + return {addr, std::move(iface)}; + } + + /** + * Start data server + */ + template + error_or>> data_listen(const remote_address& addr){ + auto find = registered_data_servers_.find(addr.get_address_id()); + if(find == registered_data_servers_.end()){ + return make_error("Server already bound to this address"); + } + return {addr,*this}; + } + + /** + * Connect to a data server + */ + template + conveyor> data_connect(const remote_address& addr){ + + } + + /** + * Internal function + */ + error_or register_data_server(const remote_address& addr, i_data_server& srv){ + + auto insert = registered_data_servers_.emplace(std::make_pair(addr.get_address_id(), {srv})); + if(insert.second){ + return make_error("Server already bound to this address"); + } + + } +}; } -- cgit v1.2.3