summaryrefslogtreecommitdiff
path: root/modules/remote/c++/remote_loopback_base.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++/remote_loopback_base.hpp
parent5d39089e1821598bf599a67b3723509f78ebd8cd (diff)
wip
Diffstat (limited to 'modules/remote/c++/remote_loopback_base.hpp')
-rw-r--r--modules/remote/c++/remote_loopback_base.hpp30
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();
}
};
}