diff --git a/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp index e49e46c15bfeab22f90c3ed9d628c0071058215e..f67ed63b52a23149b1888e0fe96aa3be184091bd 100644 --- a/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp +++ b/source/RobotAPI/libraries/armem/client/ComponentPlugin.cpp @@ -12,3 +12,10 @@ armarx::armem::client::ComponentPluginUser::ComponentPluginUser() { // pass } + + +armarx::armem::client::ComponentPluginUser::~ComponentPluginUser() +{ + // pass +} + diff --git a/source/RobotAPI/libraries/armem/client/ComponentPlugin.h b/source/RobotAPI/libraries/armem/client/ComponentPlugin.h index da3dc0f5bdcc8e3c3cb21d7f7e2ef6a6282e0d8e..8e6983a778501b10f0df04e210e769e700de56fe 100644 --- a/source/RobotAPI/libraries/armem/client/ComponentPlugin.h +++ b/source/RobotAPI/libraries/armem/client/ComponentPlugin.h @@ -29,6 +29,7 @@ namespace armarx::armem::client public: ComponentPluginUser(); + ~ComponentPluginUser() override; }; diff --git a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp index 0d9bd7d76a6fea8ae281726c6d1df51fb724faea..693a2883c3c4b851dc3864e75879684396645c09 100644 --- a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp +++ b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.cpp @@ -14,8 +14,45 @@ armarx::armem::client::ReaderComponentPlugin::~ReaderComponentPlugin() } -armarx::armem::client::ReaderComponentPluginUser::ReaderComponentPluginUser() : - memoryReader{nullptr} +void +armarx::armem::client::ReaderComponentPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) +{ + properties->topic<MemoryListenerInterface>("MemoryUpdates"); +} + + +armarx::armem::client::ReaderComponentPluginUser::ReaderComponentPluginUser() { addPlugin(plugin); } + + +armarx::armem::client::ReaderComponentPluginUser::~ReaderComponentPluginUser() +{ + // pass +} + + +void +armarx::armem::client::ReaderComponentPluginUser::memoryUpdated(const UpdateInfos& updateInfos, const Ice::Current& current) +{ + MemoryID id; + for (const UpdateInfo& updateInfo : updateInfos) + { + armem::fromIce(updateInfo.entitySnapshotID, id); + const std::string sid = id.getEntityID().str(); + if (m_callbacks.find(sid) != m_callbacks.end()) + { + m_callbacks[sid](updateInfo); + } + } +} + + +void +armarx::armem::client::ReaderComponentPluginUser::memorySubscribe(const MemoryID& id, callback callback) +{ + ARMARX_CHECK(id.hasEntityName()) << "MemoryID must be an entity ID."; + const std::string sid = id.getEntityID().str(); + m_callbacks[sid] = callback; +} diff --git a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h index b67727b5a7946cb407f4a91f31aea112caa1cbcc..96ffa8bbaed2202b97db40f67bb266e719d7d6ad 100644 --- a/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h +++ b/source/RobotAPI/libraries/armem/client/ReaderComponentPlugin.h @@ -2,13 +2,15 @@ // STD/STL -#include <mutex> +#include <functional> +#include <unordered_map> // ArmarX #include <ArmarXCore/core/Component.h> // RobotAPI #include <RobotAPI/interface/armem/MemoryInterface.h> +#include <RobotAPI/interface/armem/MemoryListenerInterface.h> #include <RobotAPI/interface/armem/MemoryNameSystemInterface.h> #include <RobotAPI/libraries/armem/client/Reader.h> #include <RobotAPI/libraries/armem/mns/MemoryNameSystemClientPlugin.h> @@ -24,19 +26,31 @@ namespace armarx::armem::client public: using plugins::MemoryNameSystemClientPlugin::MemoryNameSystemClientPlugin; - virtual ~ReaderComponentPlugin() override; + ~ReaderComponentPlugin() override; + + void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override; }; class ReaderComponentPluginUser : virtual public ManagedIceObject, - virtual public plugins::MemoryNameSystemClientPluginUser + virtual public plugins::MemoryNameSystemClientPluginUser, + virtual public MemoryListenerInterface { + using callback = std::function<void(const UpdateInfo&)>; + public: ReaderComponentPluginUser(); + ~ReaderComponentPluginUser() override; + + void memoryUpdated(const UpdateInfos& updateInfos, const Ice::Current& current) override; + + protected: + + void memorySubscribe(const MemoryID& entityID, callback callback); protected: @@ -44,6 +58,8 @@ namespace armarx::armem::client private: + std::unordered_map<std::string, callback> m_callbacks; + ReaderComponentPlugin* plugin = nullptr; }; diff --git a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp index 3a4885596c2827fccc7a354b8f89b7061b5aa377..7b8780f32a5aa9ddf61dbf69d5d2ba7d83fb86f3 100644 --- a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp +++ b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.cpp @@ -14,8 +14,13 @@ armarx::armem::client::WriterComponentPlugin::~WriterComponentPlugin() } -armarx::armem::client::WriterComponentPluginUser::WriterComponentPluginUser() : - memoryWriter{nullptr} +armarx::armem::client::WriterComponentPluginUser::WriterComponentPluginUser() { addPlugin(plugin); } + + +armarx::armem::client::WriterComponentPluginUser::~WriterComponentPluginUser() +{ + // pass +} diff --git a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h index 179f3227ca0d2a4c5866647e8cd6597d3485c79d..110ba2590364806f639678e13a22580062b1b7a8 100644 --- a/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h +++ b/source/RobotAPI/libraries/armem/client/WriterComponentPlugin.h @@ -24,7 +24,7 @@ namespace armarx::armem::client public: using plugins::MemoryNameSystemClientPlugin::MemoryNameSystemClientPlugin; - virtual ~WriterComponentPlugin() override; + ~WriterComponentPlugin() override; }; @@ -37,6 +37,7 @@ namespace armarx::armem::client public: WriterComponentPluginUser(); + ~WriterComponentPluginUser() override; protected: diff --git a/source/RobotAPI/libraries/armem/component/MemoryComponentPlugin.cpp b/source/RobotAPI/libraries/armem/component/MemoryComponentPlugin.cpp index 568646bd9a747f388c2d9db7fff6b91e85e07bed..2cc74f5b60963e9accaafb69a04d6a64750cb41f 100644 --- a/source/RobotAPI/libraries/armem/component/MemoryComponentPlugin.cpp +++ b/source/RobotAPI/libraries/armem/component/MemoryComponentPlugin.cpp @@ -16,7 +16,7 @@ namespace armarx::armem::plugins void MemoryComponentPlugin::postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) { - properties->topic(memoryListener); + properties->topic(memoryListener, "MemoryUpdates"); }