diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-11 16:07:52 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-11 16:07:52 +0200 |
commit | b9a4cf706cf0145c814ef5987dad21ebc4172ac6 (patch) | |
tree | 819d239b6d8b60b73fb0d1d1dd336a46ccbef1e1 /modules/remote/c++/transfer_loopback.hpp | |
parent | 5d39089e1821598bf599a67b3723509f78ebd8cd (diff) |
wip
Diffstat (limited to 'modules/remote/c++/transfer_loopback.hpp')
-rw-r--r-- | modules/remote/c++/transfer_loopback.hpp | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/modules/remote/c++/transfer_loopback.hpp b/modules/remote/c++/transfer_loopback.hpp index d205776..55a43fa 100644 --- a/modules/remote/c++/transfer_loopback.hpp +++ b/modules/remote/c++/transfer_loopback.hpp @@ -12,14 +12,53 @@ struct Loopback {}; template<> class remote<rmt::Loopback>; +template<typename Schema, typename Encoding> +class data_server<Schema, Encoding, rmt::Loopback> final : public i_data_server<rmt::Loopback> { +private: + //typename + using type = std::unordered_map<uint64_t, data<Schema, Encoding>>; + type values_; + + ptr<remote<rmt::Loopback>> remote_; + remote_address<rmt::Loopback> rmt_address_; +public: + data_server(ptr<remote<rmt::Loopback>> remote__, const remote_address<rmt::Loopback>& addr): + remote_{remote__}, + rmt_address_{addr} + { + remote_().register_server(addr); + } + + ~data_server(){ + remote_().deregister_server(addr); + } + + SAW_FORBID_COPY(data_server); + SAW_FORBID_MOVE(data_server); + + /** + * Return the schema id + */ + std::pair<uint32_t,uint32_t> get_class_id() const override { + uint32_t schema_hash = schema_hash<Schema>::apply(); + uint32_t encode_hash = schema_hash<Encoding>::apply(); + + return std::make_pair(schema_hash, encode_hash); + } +}; + template<typename... Schema, typename Encoding> class data_server<tmpl_group<Schema...>, Encoding, rmt::Loopback> final : public i_data_server<rmt::Loopback> { private: typename impl::data_server_redux<Encoding, storage::Default, typename tmpl_reduce<tmpl_group<Schema...>>::type>::type values_; ptr<remote<rmt::Loopback>> remote_; + remote_address<rmt::Loopback> rmt_address_; public: - data_server(remote_address<rmt::Loopback>& addr){ + data_server(ptr<remote<rmt::Loopback>> remote__, const remote_address<rmt::Loopback>& addr): + remote_{remote__}, + rmt_address_{addr} + { remote_().register_server(addr); } |