From f6643d650e3f24ab2ac49a61f48041d3e49f263e Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Tue, 4 Jan 2022 19:02:08 +0100 Subject: [PATCH] memory subscriber: subscriptions via topic --- .../client/services/MemorySubscriber.cpp | 25 +++++++++++++++++++ .../client/services/MemorySubscriber.h | 4 +++ .../components/Navigator/Navigator.cpp | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/source/armarx/navigation/client/services/MemorySubscriber.cpp b/source/armarx/navigation/client/services/MemorySubscriber.cpp index f759b164..033ea36f 100644 --- a/source/armarx/navigation/client/services/MemorySubscriber.cpp +++ b/source/armarx/navigation/client/services/MemorySubscriber.cpp @@ -27,12 +27,37 @@ namespace armarx::navigation::client ARMARX_INFO << "MemorySubscriber: will handle all events newer than " << lastMemoryPoll << "."; + // subscription api + armem::MemoryID subscriptionID; + subscriptionID.coreSegmentName = "Events"; + subscriptionID.providerSegmentName = callerId; + + // TODO add: memoryNameSystem.subscribe(subscriptionID, this, &MemorySubscriber::onEntityUpdate); + + // polling api ARMARX_TRACE; task = new armarx::PeriodicTask<MemorySubscriber>( this, &MemorySubscriber::runPollMemoryEvents, 20); task->start(); } + void + MemorySubscriber::onEntityUpdate(const armem::MemoryID& subscriptionID, + const std::vector<armem::MemoryID>& snapshotIDs) + { + ARMARX_INFO << "Received " << snapshotIDs.size() << " events from memory"; + const armem::client::QueryResult qResult = memoryReader.queryMemoryIDs(snapshotIDs); + + if (not qResult.success) /* c++20 [[unlikely]] */ + { + ARMARX_WARNING << deactivateSpam(0.1F) << "Memory lookup failed."; + return; + } + + handleEvents(qResult.memory); + } + + void MemorySubscriber::handleEvent(const armem::wm::EntityInstance& memoryEntity) { diff --git a/source/armarx/navigation/client/services/MemorySubscriber.h b/source/armarx/navigation/client/services/MemorySubscriber.h index 5a9fcbc6..059305dd 100644 --- a/source/armarx/navigation/client/services/MemorySubscriber.h +++ b/source/armarx/navigation/client/services/MemorySubscriber.h @@ -38,6 +38,10 @@ namespace armarx::navigation::client void runPollMemoryEvents(); void handleEvents(const armem::wm::Memory& memory); + + void onEntityUpdate(const armem::MemoryID& subscriptionID, + const std::vector<armem::MemoryID>& snapshotIDs); + private: const std::string callerId; armem::client::MemoryNameSystem& memoryNameSystem; diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp index 6532665f..8d0ad97d 100644 --- a/source/armarx/navigation/components/Navigator/Navigator.cpp +++ b/source/armarx/navigation/components/Navigator/Navigator.cpp @@ -50,6 +50,7 @@ #include "RobotAPI/components/ArViz/Client/Elements.h" #include "RobotAPI/components/ArViz/Client/elements/Color.h" +#include "RobotAPI/libraries/armem/core/MemoryID.h" #include "RobotAPI/libraries/armem/core/Time.h" #include "RobotAPI/libraries/armem_vision/OccupancyGridHelper.h" #include "RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h" @@ -163,7 +164,6 @@ namespace armarx::navigation::components navRemoteGui = std::make_unique<NavigatorRemoteGui>(remoteGui, *this); navRemoteGui->enable(); - initialized = true; ARMARX_INFO << "Initialized. Will now respond to navigation requests."; -- GitLab