From f93b6f7ed097191364e208866f3d21c3aec54bef Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 30 Aug 2021 18:57:38 +0200 Subject: [PATCH] Only subscribe memory updates when using ListeningPlugin Signed-off-by: Rainer Kartmann <rainer.kartmann@kit.edu> --- .../RobotAPI/libraries/armem/CMakeLists.txt | 8 +++++ .../armem/client/MemoryNameSystem.cpp | 8 ++++- .../armem/client/plugins/ListeningPlugin.cpp | 21 ++++++++++++++ .../armem/client/plugins/ListeningPlugin.h | 29 +++++++++++++++++++ .../client/plugins/ListeningPluginUser.cpp | 3 ++ .../client/plugins/ListeningPluginUser.h | 12 ++++++-- .../libraries/armem/client/plugins/Plugin.cpp | 15 ++++------ .../libraries/armem/client/plugins/Plugin.h | 1 + 8 files changed, 85 insertions(+), 12 deletions(-) create mode 100644 source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp create mode 100644 source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.h diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 32c3b9b94..88519c9ba 100644 --- a/source/RobotAPI/libraries/armem/CMakeLists.txt +++ b/source/RobotAPI/libraries/armem/CMakeLists.txt @@ -60,11 +60,13 @@ set(LIB_FILES core/error/ArMemError.cpp core/error/mns.cpp + client/MemoryNameSystem.cpp client/Reader.cpp client/Writer.cpp client/plugins/ListeningPluginUser.cpp + client/plugins/ListeningPlugin.cpp client/plugins/PluginUser.cpp client/plugins/Plugin.cpp @@ -76,6 +78,7 @@ set(LIB_FILES client/query/Builder.cpp client/query/selectors.cpp + server/MemoryToIceAdapter.cpp server/ComponentPlugin.cpp server/MemoryRemoteGui.cpp @@ -102,6 +105,7 @@ set(LIB_FILES server/query_proc/ltm.cpp server/query_proc/wm.cpp + mns/MemoryNameSystem.cpp mns/Registry.cpp mns/plugins/Plugin.cpp @@ -155,6 +159,7 @@ set(LIB_HEADERS core/wm/visitor/Visitor.h core/wm/visitor/FunctionalVisitor.h + client.h client/forward_declarations.h client/MemoryNameSystem.h @@ -163,6 +168,7 @@ set(LIB_HEADERS client/plugins.h client/plugins/ListeningPluginUser.h + client/plugins/ListeningPlugin.h client/plugins/PluginUser.h client/plugins/Plugin.h @@ -178,6 +184,7 @@ set(LIB_HEADERS client/util/SimpleReaderBase.h client/util/SimpleWriterBase.h + server.h server/forward_declarations.h @@ -210,6 +217,7 @@ set(LIB_HEADERS server/query_proc/ltm.h server/query_proc/wm.h + mns.h mns/MemoryNameSystem.h mns/Registry.h diff --git a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp index 4dcb3d624..121b29248 100644 --- a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp +++ b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp @@ -9,6 +9,8 @@ #include <SimoxUtility/algorithm/string/string_tools.h> + + namespace armarx::armem::client { @@ -190,6 +192,7 @@ namespace armarx::armem::client } + template <class ClientT> std::map<std::string, ClientT> MemoryNameSystem::_getAllClients(auto&& getProxyFn) const @@ -197,7 +200,10 @@ namespace armarx::armem::client std::map<std::string, ClientT> result; for (const auto& [name, server] : servers) { - result[name] = ClientT(getProxyFn(server)); + if (auto proxy = getProxyFn(server)) + { + result[name] = ClientT(proxy); + } } return result; } diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp new file mode 100644 index 000000000..463c6443e --- /dev/null +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.cpp @@ -0,0 +1,21 @@ +#include "ListeningPlugin.h" + +#include <RobotAPI/interface/armem/client/MemoryListenerInterface.h> + +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> + + +namespace armarx::armem::client::plugins +{ + + ListeningPlugin::~ListeningPlugin() + {} + + + void ListeningPlugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) + { + // Subscribe topics by single servers, use this as a prefix. + properties->topic<MemoryListenerInterface>("MemoryUpdates"); + } + +} diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.h b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.h new file mode 100644 index 000000000..80aac20c6 --- /dev/null +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPlugin.h @@ -0,0 +1,29 @@ +#pragma once + +#include <ArmarXCore/core/ComponentPlugin.h> + + +namespace armarx::armem::client::plugins +{ + + /** + * @brief Subscribes the memory updates topic. + * + * When using this plugin, the component needs to implement the + * `MemoryListenerInterface`. + * + * @see MemoryListenerInterface + */ + class ListeningPlugin : + public armarx::ComponentPlugin + { + public: + + using ComponentPlugin::ComponentPlugin; + virtual ~ListeningPlugin() override; + + virtual void postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) override; + + }; + +} diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp index 3b3027a38..3a40a9ffe 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.cpp @@ -1,5 +1,7 @@ #include "ListeningPluginUser.h" +#include "ListeningPlugin.h" + #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> @@ -8,6 +10,7 @@ namespace armarx::armem::client::plugins ListeningPluginUser::ListeningPluginUser() { + addPlugin(listeningPlugin); } diff --git a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h index dd80b88e6..20b124d5d 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h +++ b/source/RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h @@ -9,6 +9,8 @@ namespace armarx::armem::client::plugins { + class ListeningPlugin; + /** * @brief A memory name system client which listens to the memory updates @@ -27,8 +29,14 @@ namespace armarx::armem::client::plugins // MemoryListenerInterface - virtual void memoryUpdated(const std::vector<data::MemoryID>& updatedSnapshotIDs, - const Ice::Current&) override; + virtual void + memoryUpdated(const std::vector<data::MemoryID>& updatedSnapshotIDs, + const Ice::Current&) override; + + + private: + + ListeningPlugin* listeningPlugin = nullptr; }; diff --git a/source/RobotAPI/libraries/armem/client/plugins/Plugin.cpp b/source/RobotAPI/libraries/armem/client/plugins/Plugin.cpp index e31d2d0e5..74cf798f6 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/Plugin.cpp +++ b/source/RobotAPI/libraries/armem/client/plugins/Plugin.cpp @@ -1,18 +1,18 @@ #include "Plugin.h" -#include <ArmarXCore/core/Component.h> -#include <ArmarXCore/core/exceptions/local/ExpressionException.h> - #include <RobotAPI/libraries/armem/core/error.h> #include <RobotAPI/libraries/armem/core/ice_conversions.h> +#include <ArmarXCore/core/Component.h> +#include <ArmarXCore/core/exceptions/local/ExpressionException.h> +#include <ArmarXCore/core/logging/Logging.h> namespace armarx::armem::client::plugins { Plugin::Plugin( - ManagedIceObject& parent, std::string pre) : + ManagedIceObject& parent, std::string pre) : ComponentPlugin(parent, pre) { } @@ -24,14 +24,14 @@ namespace armarx::armem::client::plugins void Plugin::postCreatePropertyDefinitions(armarx::PropertyDefinitionsPtr& properties) { - if (!properties->hasDefinition(makePropertyName(PROPERTY_MNS_NAME_NAME))) + if (not properties->hasDefinition(makePropertyName(PROPERTY_MNS_NAME_NAME))) { properties->defineOptionalProperty<std::string>( makePropertyName(PROPERTY_MNS_NAME_NAME), memoryNameSystemName, "Name of the Memory Name System (MNS) component."); } - if (!properties->hasDefinition(makePropertyName(PROPERTY_MNS_ENABLED_NAME))) + if (not properties->hasDefinition(makePropertyName(PROPERTY_MNS_ENABLED_NAME))) { properties->defineOptionalProperty<bool>( makePropertyName(PROPERTY_MNS_ENABLED_NAME), @@ -39,9 +39,6 @@ namespace armarx::armem::client::plugins "Whether to use (and depend on) the Memory Name System (MNS)." "\nSet to false to use this memory as a stand-alone."); } - - // Subscribe topics by single servers, use this as a prefix. - properties->topic<MemoryListenerInterface>("MemoryUpdates"); } diff --git a/source/RobotAPI/libraries/armem/client/plugins/Plugin.h b/source/RobotAPI/libraries/armem/client/plugins/Plugin.h index 550f893bf..eff9134fd 100644 --- a/source/RobotAPI/libraries/armem/client/plugins/Plugin.h +++ b/source/RobotAPI/libraries/armem/client/plugins/Plugin.h @@ -25,6 +25,7 @@ namespace armarx::armem::client::plugins Plugin(ManagedIceObject& parent, std::string pre); virtual ~Plugin() override; + void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override; void preOnInitComponent() override; -- GitLab