From 786be4b4f3bf2fba8cb9fffc091bfa01e9f9d3d8 Mon Sep 17 00:00:00 2001 From: Raul Radu <raul.radu@mail.polimi.it> Date: Wed, 16 Oct 2024 09:51:11 +0200 Subject: [PATCH] [Graph] Fixed issue that prevented multiple subscriptions to work simultaneosly --- src/shared/Core/MessageBroker/Subscription.h | 4 +++- src/shared/Modules/Graph/Graph.cpp | 10 ++++++---- src/shared/Modules/Graph/Graph.h | 3 +-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/shared/Core/MessageBroker/Subscription.h b/src/shared/Core/MessageBroker/Subscription.h index 390b100d..4015f2cc 100644 --- a/src/shared/Core/MessageBroker/Subscription.h +++ b/src/shared/Core/MessageBroker/Subscription.h @@ -11,13 +11,15 @@ class Subscription public: void unsubscribe() { MessageBroker::getInstance().unsubscribe(this); } + bool matchesFilter(Filter filter) { return this->filter == filter; }; + ~Subscription() { unsubscribe(); } friend class MessageBroker; private: Subscription(MessageBroker::SubscriberFn callback, Filter filter) - : filter(filter), callback(std::move(callback)){}; + : filter(filter), callback(std::move(callback)) {}; Subscription() = delete; Subscription(Subscription&) = delete; diff --git a/src/shared/Modules/Graph/Graph.cpp b/src/shared/Modules/Graph/Graph.cpp index 29da0a0e..2a3b3873 100644 --- a/src/shared/Modules/Graph/Graph.cpp +++ b/src/shared/Modules/Graph/Graph.cpp @@ -145,9 +145,11 @@ void Graph::onFilterAdded(const Filter& filter) } plot->replot(); - subscription = MessageBroker::getInstance().subscribe( - filter, [this](const Message& message, const Filter& filter) - { onMessageReceived(message, filter); }); + subscriptions.insert( + {filter, + MessageBroker::getInstance().subscribe( + filter, [this](const Message& message, const Filter& filter) + { onMessageReceived(message, filter); })}); } void Graph::onFilterRemoved(const Filter& filter) @@ -164,7 +166,7 @@ void Graph::onFilterRemoved(const Filter& filter) lines.remove(filter); - subscription = nullptr; + subscriptions.erase(subscriptions.find(filter)); } else { diff --git a/src/shared/Modules/Graph/Graph.h b/src/shared/Modules/Graph/Graph.h index fa2da804..21122ba5 100644 --- a/src/shared/Modules/Graph/Graph.h +++ b/src/shared/Modules/Graph/Graph.h @@ -28,7 +28,6 @@ #include <QTimer> #include <QWidget> - class Graph : public Module { Q_OBJECT @@ -79,6 +78,6 @@ private: int legendFontSize = 15; - std::unique_ptr<Subscription> subscription; + std::map<Filter, std::unique_ptr<Subscription>> subscriptions; std::unique_ptr<SubscriptionsPanel> subscriptionsPanel; }; -- GitLab