diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp index 6c3afb9a2adcc3f08495bc8c979d33ebc11742f2..ce25109502b1da09cb01399396a5c7bca92ed50f 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp +++ b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.cpp @@ -1,14 +1,18 @@ #include "SimpleReaderBase.h" -#include "RobotAPI/libraries/armem/client/ComponentPlugin.h" +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> + namespace armarx::armem::client::util { - SimpleReaderBase::SimpleReaderBase(ComponentPluginUser& memoryClient) : - component(memoryClient) + + SimpleReaderBase::SimpleReaderBase(MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) { } + void SimpleReaderBase::registerPropertyDefinitions( armarx::PropertyDefinitionsPtr& def) { @@ -20,36 +24,40 @@ namespace armarx::armem::client::util def->optional(props.coreSegmentName, prefix + "CoreSegment"); } + void SimpleReaderBase::connect() { // Wait for the memory to become available and add it as dependency. - ARMARX_IMPORTANT << "Writer: Waiting for memory '" << props.memoryName + ARMARX_IMPORTANT << "SimpleReaderBase: Waiting for memory '" << props.memoryName << "' ..."; - auto result = component.useMemory(props.memoryName); - if (not result.success) + try + { + memoryReaderClient = memoryNameSystem.useReader(MemoryID().withMemoryName(props.memoryName)); + ARMARX_IMPORTANT << "SimpleReaderBase: Connected to memory '" << props.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) { - ARMARX_ERROR << result.errorMessage; + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "SimpleReaderBase: Connected to memory '" - << props.memoryName; - - memoryReaderClient.setReadingMemory(result.proxy); } + std::mutex& SimpleReaderBase::memoryReaderMutex() { return memoryMutex; } + const armem::client::Reader& SimpleReaderBase::memoryReader() const { return memoryReaderClient; } + const SimpleReaderBase::Properties& SimpleReaderBase::properties() const { return props; } -} // namespace armarx::armem::client::util \ No newline at end of file + +} // namespace armarx::armem::client::util diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h index 4e2c8edf24d8b99362e81225b439f1ea7ed56522..a78db401d3f578d7be9f9c86542a37f72326aabc 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h +++ b/source/RobotAPI/libraries/armem/client/util/SimpleReaderBase.h @@ -23,14 +23,14 @@ #include <mutex> -#include "ArmarXCore/core/application/properties/PropertyDefinitionContainer.h" +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> -#include "RobotAPI/libraries/armem/client/Reader.h" +#include <RobotAPI/libraries/armem/client/Reader.h> namespace armarx::armem::client { - class ComponentPluginUser; + class MemoryNameSystem; } namespace armarx::armem::client::util @@ -39,13 +39,16 @@ namespace armarx::armem::client::util class SimpleReaderBase { public: - SimpleReaderBase(ComponentPluginUser& memoryClient); + + SimpleReaderBase(MemoryNameSystem& memoryNameSystem); virtual ~SimpleReaderBase() = default; void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def); void connect(); + protected: + // Properties struct Properties { @@ -61,13 +64,15 @@ namespace armarx::armem::client::util std::mutex& memoryReaderMutex(); const armem::client::Reader& memoryReader() const; + private: + Properties props; armem::client::Reader memoryReaderClient; std::mutex memoryMutex; - ComponentPluginUser& component; + MemoryNameSystem& memoryNameSystem; }; } // namespace armarx::armem::client::util diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp index a7ac78e00496cf890b97f11523f200c5fc9c3ab3..ca399bf8f64a2fd347d17c31587d33639cded032 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp +++ b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp @@ -1,14 +1,17 @@ #include "SimpleWriterBase.h" -#include "RobotAPI/libraries/armem/client/ComponentPlugin.h" +#include <RobotAPI/libraries/armem/core/error.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> + namespace armarx::armem::client::util { - SimpleWriterBase::SimpleWriterBase(ComponentPluginUser& component) : - component(component) + SimpleWriterBase::SimpleWriterBase(MemoryNameSystem& memoryNameSystem) : + memoryNameSystem(memoryNameSystem) { } + void SimpleWriterBase::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def) { @@ -26,36 +29,40 @@ namespace armarx::armem::client::util "Name of this provider"); } + void SimpleWriterBase::connect() { // Wait for the memory to become available and add it as dependency. ARMARX_IMPORTANT << "SimpleWriterBase: Waiting for memory '" << props.memoryName << "' ..."; - auto result = component.useMemory(props.memoryName); - if (not result.success) + try { - ARMARX_ERROR << result.errorMessage; + memoryWriterClient = memoryNameSystem.useWriter(MemoryID().withMemoryName(props.memoryName)); + ARMARX_IMPORTANT << "SimpleWriterBase: Connected to memory '" << props.memoryName << "'"; + } + catch (const armem::error::CouldNotResolveMemoryServer& e) + { + ARMARX_ERROR << e.what(); return; } - - ARMARX_IMPORTANT << "SimpleWriterBase: Connected to memory '" - << props.memoryName; - - memoryWriterClient.setWritingMemory(result.proxy); - // memoryReader.setReadingMemory(result.proxy); } + std::mutex& SimpleWriterBase::memoryWriterMutex() { return memoryMutex; } + armem::client::Writer& SimpleWriterBase::memoryWriter() { return memoryWriterClient; } + + const SimpleWriterBase::Properties& SimpleWriterBase::properties() const { return props; } -} // namespace armarx::armem::client::util \ No newline at end of file + +} // namespace armarx::armem::client::util diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h index 55829b2c7bbc3dc5e9758156ad7c4f7e14956db1..1413299a3081f36dfaa83cce425c50994e7018c2 100644 --- a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h +++ b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h @@ -23,15 +23,14 @@ #include <mutex> -#include "ArmarXCore/core/application/properties/PropertyDefinitionContainer.h" +#include <ArmarXCore/core/application/properties/PropertyDefinitionContainer.h> -// #include "RobotAPI/libraries/armem/client/Reader.h" -#include "RobotAPI/libraries/armem/client/Writer.h" +#include <RobotAPI/libraries/armem/client/Writer.h> namespace armarx::armem::client { - class ComponentPluginUser; + class MemoryNameSystem; } namespace armarx::armem::client::util @@ -40,15 +39,15 @@ namespace armarx::armem::client::util class SimpleWriterBase { public: - SimpleWriterBase(ComponentPluginUser& component); + + SimpleWriterBase(MemoryNameSystem& memoryNameSystem); virtual ~SimpleWriterBase() = default; void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def); void connect(); + protected: - std::mutex& memoryWriterMutex(); - armem::client::Writer& memoryWriter(); struct Properties { @@ -62,16 +61,19 @@ namespace armarx::armem::client::util virtual std::string propertyPrefix() const = 0; virtual Properties defaultProperties() const = 0; + std::mutex& memoryWriterMutex(); + armem::client::Writer& memoryWriter(); + + private: + Properties props; armem::client::Writer memoryWriterClient; std::mutex memoryMutex; - // armem::client::Reader memoryReader; - // std::mutex memoryReaderMutex; + MemoryNameSystem& memoryNameSystem; - ComponentPluginUser& component; }; -} // namespace armarx::armem::client::util \ No newline at end of file +} // namespace armarx::armem::client::util