diff --git a/source/armarx/navigation/client/ComponentPlugin.cpp b/source/armarx/navigation/client/ComponentPlugin.cpp index 0f35e89dde9d1dcec4b9dd1f8deeb7510db58f83..628d090c40468ec8b51feb6e64c15668e072e47e 100644 --- a/source/armarx/navigation/client/ComponentPlugin.cpp +++ b/source/armarx/navigation/client/ComponentPlugin.cpp @@ -1,18 +1,19 @@ #include <memory> -#include "ArmarXCore/core/exceptions/local/ExpressionException.h" #include <ArmarXCore/core/Component.h> #include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> +#include <ArmarXCore/core/exceptions/local/ExpressionException.h> #include <ArmarXCore/util/CPPUtility/trace.h> -#include "RobotAPI/components/armem/MemoryNameSystem/MemoryNameSystem.h" -#include "RobotAPI/libraries/armem/client/MemoryNameSystem.h" -#include "RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h" -#include "RobotAPI/libraries/armem/client/plugins/PluginUser.h" +#include <RobotAPI/components/armem/MemoryNameSystem/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/client/plugins/ListeningPluginUser.h> +#include <RobotAPI/libraries/armem/client/plugins/PluginUser.h> -#include "armarx/navigation/client/services/MemorySubscriber.h" +#include <armarx/navigation/client/services/SimpleEventHandler.h> #include <armarx/navigation/client/ComponentPlugin.h> #include <armarx/navigation/client/Navigator.h> +#include <armarx/navigation/client/services/MemorySubscriber.h> // ComponentPlugin @@ -45,12 +46,6 @@ armarx::navigation::client::ComponentPlugin::preOnConnectComponent() ARMARX_TRACE; const std::string componentName = parent().getName(); - if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>()) - { - auto mns = parent<armarx::armem::client::plugins::ListeningPluginUser>().memoryNameSystem(); - parent<armarx::navigation::client::ComponentPluginUser>().memoryNameSystem = &mns; - } - ARMARX_CHECK_NOT_NULL(navigatorPrx) << "Navigator proxy is null!"; iceNavigator.setNavigatorComponent(navigatorPrx); } @@ -61,7 +56,29 @@ armarx::navigation::client::ComponentPlugin::configureNavigator( const std::string& configId) { ARMARX_TRACE; + + ARMARX_CHECK_NULL(eventHandler) << "`configureNavigator()` can only be called once!"; + + eventHandler = [&]() -> std::unique_ptr<SimpleEventHandler> + { + if (parentDerives<armarx::armem::client::plugins::ListeningPluginUser>()) + { + ARMARX_INFO << "Using memory event callbacks."; + auto memoryNameSystem = + parent<armarx::armem::client::plugins::ListeningPluginUser>().memoryNameSystem(); + return std::make_unique<MemorySubscriber>(configId, memoryNameSystem); + } + + ARMARX_INFO << "Cannot use memory event callbacks as this component is not derived from " + "`armarx::armem::client::plugins::ListeningPluginUser`"; + + return std::make_unique<SimpleEventHandler>(); + }(); + iceNavigator.createConfig(stackConfig, configId); + + navigator = std::make_unique<Navigator>(Navigator::InjectedServices{ + .navigator = &iceNavigator, .subscriber = eventHandler.get()}); } // ComponentPluginUser @@ -80,21 +97,5 @@ armarx::navigation::client::ComponentPluginUser::configureNavigator( plugin->configureNavigator(stackConfig, getName()); } -void -armarx::navigation::client::ComponentPluginUser::configureNavigator( - const client::NavigationStackConfig& stackConfig, - const std::string& configId) -{ - ARMARX_CHECK_NULL(navigatorServices.subscriber) - << "`configureNavigator` can only be called once atm."; - - if (memoryNameSystem != nullptr) - { - memorySubscriber = std::make_unique<MemorySubscriber>(configId, *memoryNameSystem); - navigatorServices.subscriber = memorySubscriber.get(); - } - - iceNavigator.createConfig(stackConfig, configId); -} armarx::navigation::client::ComponentPluginUser::~ComponentPluginUser() = default; diff --git a/source/armarx/navigation/client/ComponentPlugin.h b/source/armarx/navigation/client/ComponentPlugin.h index 0ecfccdf3eb4ba8d048e00ad7a1fe576f10fb41c..0f63131a890e6bb79fc946c7df274b1978571b40 100644 --- a/source/armarx/navigation/client/ComponentPlugin.h +++ b/source/armarx/navigation/client/ComponentPlugin.h @@ -3,25 +3,24 @@ #include <ArmarXCore/core/ComponentPlugin.h> #include <ArmarXCore/core/ManagedIceObject.h> -#include "RobotAPI/libraries/armem/client/MemoryNameSystem.h" +#include <armarx/navigation/client/ComponentPlugin.h> #include <armarx/navigation/client/Navigator.h> #include <armarx/navigation/client/ice/NavigatorInterface.h> #include <armarx/navigation/client/services/IceNavigator.h> -#include <armarx/navigation/client/services/MemorySubscriber.h> #include <armarx/navigation/client/services/SimpleEventHandler.h> namespace armarx::navigation::client { + class Navigator; + class ComponentPlugin : public armarx::ComponentPlugin { - public: ComponentPlugin(ManagedIceObject& parent, const std::string& prefix) : - armarx::ComponentPlugin(parent, prefix), navigator(navigatorServices){}; -// using armarx::ComponentPlugin::ComponentPlugin; + armarx::ComponentPlugin(parent, prefix){}; ~ComponentPlugin() override; @@ -39,13 +38,11 @@ namespace armarx::navigation::client client::NavigatorInterfacePrx navigatorPrx; IceNavigator iceNavigator; - // MemorySubscriber memorySubscriber; - SimpleEventHandler memorySubscriber; // FIXME - Navigator::InjectedServices navigatorServices{.navigator = &iceNavigator, - .subscriber = &memorySubscriber}; + + std::unique_ptr<SimpleEventHandler> eventHandler; public: - Navigator navigator; + std::unique_ptr<Navigator> navigator; }; @@ -56,29 +53,18 @@ namespace armarx::navigation::client ComponentPluginUser(); void configureNavigator(const client::NavigationStackConfig& stackConfig); - Navigator& getNavigator() { - return plugin->navigator; + + Navigator& + getNavigator() + { + return *plugin->navigator; } // Non-API ~ComponentPluginUser() override; private: - IceNavigator iceNavigator; - - armem::client::MemoryNameSystem* memoryNameSystem; - // MemorySubscriber memorySubscriber; - // SimpleEventHandler memorySubscriber; // FIXME - Navigator::InjectedServices navigatorServices{.navigator = &iceNavigator, - .subscriber = nullptr}; - - ComponentPlugin* plugin = nullptr; - std::unique_ptr<MemorySubscriber> memorySubscriber; - - - public: - Navigator navigator; }; } // namespace armarx::navigation::client