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++/remote_loopback_base.hpp | |
parent | 5d39089e1821598bf599a67b3723509f78ebd8cd (diff) |
wip
Diffstat (limited to 'modules/remote/c++/remote_loopback_base.hpp')
-rw-r--r-- | modules/remote/c++/remote_loopback_base.hpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/modules/remote/c++/remote_loopback_base.hpp b/modules/remote/c++/remote_loopback_base.hpp index 660180d..9b66fa8 100644 --- a/modules/remote/c++/remote_loopback_base.hpp +++ b/modules/remote/c++/remote_loopback_base.hpp @@ -12,7 +12,20 @@ struct Loopback {}; template<> class remote<rmt::Loopback> { private: - std::map<uint64_t, ptr<i_data_server<rmt::Loopback>>> registered_data_servers_; + struct key_t { + std::array<uint64_t,3> data; + + bool operator<(const std::array<uint64_t,3>& rhs) const { + for(uint64_t i = 0u; i < 3; ++i){ + if(data[i] != rhs.data[i]){ + return data[i] < rhs.data[i]; + } + } + return false; + } + }; + + std::map<key_t, ptr<i_data_server<rmt::Loopback>>> registered_data_servers_; public: /** * Resolves an address for the remote @@ -52,6 +65,15 @@ public: */ template<typename Schema, typename Encode> conveyor<data_client<Schema, Encode, rmt::Loopback>> data_connect(const remote_address<rmt::Loopback>& addr){ + auto class_id = srv.get_class_id(); + key_t key; + key.data = {addr.get_address_id(), class_id.first, class_id.second}; + + auto find = registered_data_servers_.find(key); + if(find == registered_data_servers_.end()){ + return make_error<err::not_found>("Server not found"); + } + } @@ -60,11 +82,15 @@ public: */ error_or<void> register_data_server(const remote_address<rmt::Loopback>& addr, i_data_server<rmt::Loopback>& srv){ - auto insert = registered_data_servers_.emplace(std::make_pair(addr.get_address_id(), {srv})); + auto class_id = srv.get_class_id(); + key_t key; + key.data = {addr.get_address_id(), class_id.first, class_id.second}; + auto insert = registered_data_servers_.emplace(std::make_pair(key, {srv})); if(insert.second){ return make_error<err::already_exists>("Server already bound to this address"); } + return make_void(); } }; } |