From fad5d37382552af7328dd67d038c1eaf44cf0aee Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Tue, 13 Aug 2024 23:36:59 +0200 Subject: Wip for FS remotes --- modules/remote-filesystem/c++/remote.hpp | 49 ++++++++++++-------------- modules/remote-filesystem/c++/transport.hpp | 53 +++++++++++++++++++++++++++++ modules/remote/c++/transfer_loopback.hpp | 2 +- 3 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 modules/remote-filesystem/c++/transport.hpp (limited to 'modules') diff --git a/modules/remote-filesystem/c++/remote.hpp b/modules/remote-filesystem/c++/remote.hpp index 42cdd03..062d7ee 100644 --- a/modules/remote-filesystem/c++/remote.hpp +++ b/modules/remote-filesystem/c++/remote.hpp @@ -6,54 +6,49 @@ namespace saw { namespace rmt { -struct FileSystem {}; +struct File {}; } template<> -class remote_address { +class remote_address { private: std::filesystem::path path_; public: remote_address(const std::filesystem::path& path__): path_{path__} {} -}; -template -class rpc_client { -private: - ptr> addr_; -public: - rpc_client(ptr> addr__): - addr_{addr__} - {} -}; + std::string get_path_string() const { + return path_.string(); + } -template -class rpc_server { -private: - ptr> addr_; -public: - rpc_server(ptr> addr__): - addr_{addr__} - {} + const std::filesystem::path& get_path() const { + return path_; + } }; template<> -class remote { +class remote { private: SAW_FORBID_COPY(remote); SAW_FORBID_MOVE(remote); - + std::map>> registered_data_servers_; public: - error_or>> parse_address(const std::string_view& path_v){ - return heap>(path_v); + error_or>> parse_address(const std::string_view& path_v){ + return heap>(path_v); } - template - rpc_server listen(const remote_address& addr, typename rpc_server::InterfaceT iface){ - return {addr, std::move(iface)}; + template + error_or>> data_listen(ref> addr){ + auto insert_res = registered_data_servers_.emplace(std::make_pair(addr.get_path_string(),{})); + if(!insert_res.second){ + return make_error(); + } + + auto dat_srv = heap>(*this, addr); + insert_res.first->second = {dat_srv}; + return dat_srv; } }; } diff --git a/modules/remote-filesystem/c++/transport.hpp b/modules/remote-filesystem/c++/transport.hpp new file mode 100644 index 0000000..367f533 --- /dev/null +++ b/modules/remote-filesystem/c++/transport.hpp @@ -0,0 +1,53 @@ +#pragma once + +#include "remote.hpp" + +#include + +namespace saw { +template +class data_server final : public i_data_server { +private: + ptr> remote_; + remote_address addr_; +public: + static constexpr std::pair class_id{schema_hash::apply(), schema_hash::apply()}; + + data_server(ptr> remote__, ref> addr__): + remote_{remote__}, + addr_{addr__()} + {} + + ~data_server(){ + remote().deregister_data_server(*this); + } + + SAW_FORBID_MOVE(data_server); + SAW_FORBID_COPY(data_server); + + std::pair get_class_id() const override { + return class_id; + } + + error_or send(const data& dat, id store_id){ + try { + } + + return make_error(); + } + + error_or allocate(data::MetaSchema, Encoding> meta, id store_id){ + + return make_error(); + } + + error_or erase(id store_id){ + return make_error(); + } + + error_or> receive(id store_id){ + + } + +}; +} diff --git a/modules/remote/c++/transfer_loopback.hpp b/modules/remote/c++/transfer_loopback.hpp index 3eb6922..39ae402 100644 --- a/modules/remote/c++/transfer_loopback.hpp +++ b/modules/remote/c++/transfer_loopback.hpp @@ -20,7 +20,7 @@ private: ptr> remote_; remote_address rmt_address_; public: - static constexpr std::pair class_id{schema_hash::apply(), schema_hash::apply()}; + static constexpr std::pair class_id{schema_hash::apply(), schema_hash::apply()}; data_server(ptr> remote__, const remote_address& addr): remote_{remote__}, -- cgit v1.2.3