diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 32c3b9b949577ab7f91b4993c186f181151abc6d..88519c9ba53edf07b8c3ed5a1d7183cf8eb67d36 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 4dcb3d624e42b901fe0d70d91a89c136ff1692ba..121b2924802c1a8c7d6ab411fd1c88755ee56621 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 0000000000000000000000000000000000000000..463c6443e11ddd0ec92d6c5bb4b1001e4e97dfed --- /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 0000000000000000000000000000000000000000..80aac20c61d49ffc67963da3b14be0c984ab5a3a --- /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 3b3027a3808e14157378214637bd0c832c431fa6..3a40a9ffe27b1116fe5a78f5d1a3088652818b38 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 dd80b88e6fd5f705aa707569a19c6ad57bac4106..20b124d5de44b9e2f0a67bb7ec4302a51cdc1ccd 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 e31d2d0e5d8d9446dc087eab1f3709a4034f6223..74cf798f6f65d31ee1e4bb2a2ba239c264d9f88b 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 550f893bfcbdacd83dbd9abecebe3ad642309bcb..eff9134fda523d7b91b6cda2fdd4845dd78238cb 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;