diff --git a/source/RobotAPI/libraries/armem/core/error/mns.cpp b/source/RobotAPI/libraries/armem/core/error/mns.cpp index 5a29321f7fce0daafc6c6dabf49481a72b37fce2..da8b8f4855ac67e575cb1e9a677eea277dc1cc58 100644 --- a/source/RobotAPI/libraries/armem/core/error/mns.cpp +++ b/source/RobotAPI/libraries/armem/core/error/mns.cpp @@ -44,16 +44,16 @@ namespace armarx::armem::error } - - MemoryServerRegistrationFailed::MemoryServerRegistrationFailed(const MemoryID& memoryID, const std::string& errorMessage) : - ArMemError(makeMsg(memoryID, errorMessage)) + ServerRegistrationOrRemovalFailed::ServerRegistrationOrRemovalFailed(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage) : + ArMemError(makeMsg(verb, memoryID, errorMessage)) { + } - std::string MemoryServerRegistrationFailed::makeMsg(const MemoryID& memoryID, const std::string& errorMessage) + std::string ServerRegistrationOrRemovalFailed::makeMsg(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage) { std::stringstream ss; - ss << "Failed to register memory server for '" << memoryID << "' in the Memory Name System (MNS)."; + ss << "Failed to " << verb << " memory server for '" << memoryID << "' in the Memory Name System (MNS)."; if (not errorMessage.empty()) { ss << "\n" << errorMessage; diff --git a/source/RobotAPI/libraries/armem/core/error/mns.h b/source/RobotAPI/libraries/armem/core/error/mns.h index 4c429572958ea5bac8cdaf2f83a01d768543c72b..428df8cae66494f72b1a56267a97b3942f63f7a6 100644 --- a/source/RobotAPI/libraries/armem/core/error/mns.h +++ b/source/RobotAPI/libraries/armem/core/error/mns.h @@ -37,15 +37,16 @@ namespace armarx::armem::error /** * @brief Indicates that a query to the Memory Name System failed. */ - class MemoryServerRegistrationFailed : public ArMemError + class ServerRegistrationOrRemovalFailed : public ArMemError { public: - MemoryServerRegistrationFailed(const MemoryID& memoryID, const std::string& errorMessage = ""); + ServerRegistrationOrRemovalFailed(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage = ""); - static std::string makeMsg(const MemoryID& memoryID, const std::string& errorMessage = ""); + static std::string makeMsg(const std::string& verb, const MemoryID& memoryID, const std::string& errorMessage = ""); }; + } diff --git a/source/RobotAPI/libraries/armem/mns/Client.cpp b/source/RobotAPI/libraries/armem/mns/Client.cpp index aa751e6d081ef8db1e94c8a2f0d21bb037cbbc8d..cb308f79a4a10ab4be9818c57274785108f63935 100644 --- a/source/RobotAPI/libraries/armem/mns/Client.cpp +++ b/source/RobotAPI/libraries/armem/mns/Client.cpp @@ -135,7 +135,7 @@ namespace armarx::armem::mns client::Writer Client::getWriter(const MemoryID& memoryID) { - client::Writer(resolveServer(memoryID)); + return client::Writer(resolveServer(memoryID)); } @@ -161,7 +161,20 @@ namespace armarx::armem::mns data::RegisterMemoryResult result = mns->registerMemory(input); if (!result.success) { - throw error::MemoryServerRegistrationFailed(memoryID, result.errorMessage); + throw error::ServerRegistrationOrRemovalFailed("register", memoryID, result.errorMessage); + } + } + + + void Client::removeServer(const MemoryID& memoryID) + { + data::RemoveMemoryInput input; + input.name = memoryID.memoryName; + + data::RemoveMemoryResult result = mns->removeMemory(input); + if (!result.success) + { + throw error::ServerRegistrationOrRemovalFailed("remove", memoryID, result.errorMessage); } } diff --git a/source/RobotAPI/libraries/armem/mns/Client.h b/source/RobotAPI/libraries/armem/mns/Client.h index bf77eec918f5c6224428e8e908e9f694aca11ff7..5979a6cab10472d3d685d94d2ef8ea4a0f0124a2 100644 --- a/source/RobotAPI/libraries/armem/mns/Client.h +++ b/source/RobotAPI/libraries/armem/mns/Client.h @@ -118,7 +118,19 @@ namespace armarx::armem::mns */ client::Reader getReader(const MemoryID& memoryID); + /** + * @brief Get Readers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Reader> getAllReaders(bool update = true); + /** + * @brief Get Readers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Reader> getAllReaders() const; @@ -132,7 +144,18 @@ namespace armarx::armem::mns */ client::Writer getWriter(const MemoryID& memoryID); + /** + * @brief Get Writers for all registered servers. + * + * @param update If true, perform an update first. + * @return The readers. + */ std::map<std::string, client::Writer> getAllWriters(bool update = true); + /** + * @brief Get Writers for all registered servers. + * + * @return The readers. + */ std::map<std::string, client::Writer> getAllWriters() const; @@ -144,10 +167,19 @@ namespace armarx::armem::mns * @param memoryID The memoryID. * @param server The memory server proxy. * - * @throw `error::MemoryServerRegistrationFailed` If the registration failed. + * @throw `error::ServerRegistrationOrRemovalFailed` If the registration failed. */ void registerServer(const MemoryID& memoryID, server::MemoryInterfacePrx server); + /** + * @brief Remove a memory server from the MNS. + * + * @param memoryID The memoryID. + * + * @throw `error::ServerRegistrationOrRemovalFailed` If the removal failed. + */ + void removeServer(const MemoryID& memoryID); + // Operators