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