summaryrefslogtreecommitdiff
path: root/modules/remote/c++/transfer_loopback.hpp
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-11 16:07:52 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-11 16:07:52 +0200
commitb9a4cf706cf0145c814ef5987dad21ebc4172ac6 (patch)
tree819d239b6d8b60b73fb0d1d1dd336a46ccbef1e1 /modules/remote/c++/transfer_loopback.hpp
parent5d39089e1821598bf599a67b3723509f78ebd8cd (diff)
wip
Diffstat (limited to 'modules/remote/c++/transfer_loopback.hpp')
-rw-r--r--modules/remote/c++/transfer_loopback.hpp41
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);
}