#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"); } } }; }