From afe4852aa59a467938584b04764864cc0dae3312 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Wed, 27 Apr 2022 17:54:20 +0200 Subject: [PATCH] Let the MemoryListener use the respective topic when subscribing a memory ID --- .../armem/client/MemoryNameSystem.cpp | 5 ++++- .../armem/client/util/MemoryListener.cpp | 20 ++++++++++++++++++- .../armem/client/util/MemoryListener.h | 16 ++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp index 813981444..94946cafe 100644 --- a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp +++ b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp @@ -20,6 +20,7 @@ namespace armarx::armem::client MemoryNameSystem::MemoryNameSystem(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component) : + util::MemoryListener(component), mns(mns), component(component) { } @@ -28,7 +29,7 @@ namespace armarx::armem::client void MemoryNameSystem::initialize(mns::MemoryNameSystemInterfacePrx mns, ManagedIceObject* component) { this->mns = mns; - this->component = component; + setComponent(component); } @@ -402,8 +403,10 @@ namespace armarx::armem::client this->mns = mns; } + void MemoryNameSystem::setComponent(ManagedIceObject* component) { + util::MemoryListener::setComponent(component); this->component = component; } diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp index a4aa21483..c8a7c6c68 100644 --- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp +++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.cpp @@ -5,6 +5,7 @@ #include <ArmarXCore/core/exceptions/LocalException.h> #include <ArmarXCore/core/logging/Logging.h> #include <ArmarXCore/core/ice_conversions/ice_conversions_templates.h> +#include <ArmarXCore/core/ManagedIceObject.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> #include <RobotAPI/libraries/armem/core/error.h> @@ -13,8 +14,21 @@ namespace armarx::armem::client::util { - MemoryListener::MemoryListener() + std::string MemoryListener::MakeMemoryTopicName(const MemoryID& memoryID) { + return "MemoryUpdates." + memoryID.memoryName; + } + + + MemoryListener::MemoryListener(ManagedIceObject* component) : + component(component) + { + } + + + void MemoryListener::setComponent(ManagedIceObject* component) + { + this->component = component; } @@ -109,6 +123,10 @@ namespace armarx::armem::client::util MemoryListener::subscribe(const MemoryID& id, Callback callback) { callbacks[id].push_back(callback); + if (component) + { + component->usingTopic(MakeMemoryTopicName(id)); + } } diff --git a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h index 2d530097c..ceb765e60 100644 --- a/source/RobotAPI/libraries/armem/client/util/MemoryListener.h +++ b/source/RobotAPI/libraries/armem/client/util/MemoryListener.h @@ -11,6 +11,12 @@ #include <RobotAPI/libraries/armem/core/MemoryID.h> + +namespace armarx +{ + class ManagedIceObject; +} + namespace armarx::armem::client::util { @@ -20,6 +26,7 @@ namespace armarx::armem::client::util */ class MemoryListener { + public: using Callback = std::function<void(const MemoryID& subscriptionID, const std::vector<MemoryID>& updatedSnapshotIDs)>; using CallbackUpdatedOnly = std::function<void(const std::vector<MemoryID>& updatedSnapshotIDs)>; @@ -29,11 +36,14 @@ namespace armarx::armem::client::util template <class CalleeT> using MemberCallbackUpdatedOnly = void(CalleeT::*)(const std::vector<MemoryID>& updatedSnapshotIDs); + static std::string MakeMemoryTopicName(const MemoryID& memoryID); + public: - MemoryListener(); + MemoryListener(ManagedIceObject* component = nullptr); + void setComponent(ManagedIceObject* component); void subscribe(const MemoryID& subscriptionID, Callback Callback); void subscribe(const MemoryID& subscriptionID, CallbackUpdatedOnly Callback); @@ -73,6 +83,10 @@ namespace armarx::armem::client::util std::unordered_map<MemoryID, std::vector<Callback>> callbacks; + private: + + armarx::ManagedIceObject* component; + }; } -- GitLab