From eea063ad2e1372328c5f6d2e9fa250be4bde668c Mon Sep 17 00:00:00 2001
From: Javier Gil Aviles <javiergil@eprosima.com>
Date: Wed, 22 Jan 2025 17:50:45 +0100
Subject: [PATCH] Corrections from review

Signed-off-by: Javier Gil Aviles <javiergil@eprosima.com>
---
 .../sustainml_cpp/core/RequestReplier.hpp     |  8 ++--
 sustainml_cpp/src/cpp/core/NodeImpl.cpp       | 18 ++------
 sustainml_cpp/src/cpp/core/NodeImpl.hpp       |  2 +
 sustainml_cpp/src/cpp/core/RequestReplier.cpp | 42 ++++---------------
 .../src/cpp/orchestrator/OrchestratorNode.cpp |  6 +--
 5 files changed, 21 insertions(+), 55 deletions(-)

diff --git a/sustainml_cpp/include/sustainml_cpp/core/RequestReplier.hpp b/sustainml_cpp/include/sustainml_cpp/core/RequestReplier.hpp
index 7e2ac8f..9d24c82 100644
--- a/sustainml_cpp/include/sustainml_cpp/core/RequestReplier.hpp
+++ b/sustainml_cpp/include/sustainml_cpp/core/RequestReplier.hpp
@@ -1,4 +1,4 @@
-// Copyright 2023 Proyectos y Sistemas de Mantenimiento SL (eProsima).
+// Copyright 2025 Proyectos y Sistemas de Mantenimiento SL (eProsima).
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -54,7 +54,8 @@ class RequestReplier
     RequestReplier(
             std::function<void(void*)> callback,
             const char* topicw,
-            const char* topicr);
+            const char* topicr,
+            void* data);
 
     ~RequestReplier();
 
@@ -79,6 +80,7 @@ class RequestReplier
     std::function<void(void*)> callback_;
     const char* topicr_;
     const char* topicw_;
+    void* data_;
 
     eprosima::fastdds::dds::DomainParticipant* participant_;
 
@@ -129,8 +131,6 @@ class RequestReplier
 
         RequestReplier* node_;
         size_t matched_;
-        RequestTypeImpl req_;
-        ResponseTypeImpl res_;
 
     }
     listener_;
diff --git a/sustainml_cpp/src/cpp/core/NodeImpl.cpp b/sustainml_cpp/src/cpp/core/NodeImpl.cpp
index a1f833e..cbe34c1 100644
--- a/sustainml_cpp/src/cpp/core/NodeImpl.cpp
+++ b/sustainml_cpp/src/cpp/core/NodeImpl.cpp
@@ -89,19 +89,14 @@ NodeImpl::NodeImpl(
                         RequestTypeImpl* in = static_cast<RequestTypeImpl*>(input);
                         types::RequestType req;
                         req = in;
-                        std::cout << "Size of request received: " << sizeof(req) << " bytes" << std::endl;
-                        std::cout << "Configuration received: " << static_cast<RequestTypeImpl*>(input)->configuration() << std::endl;
-                        std::cout << "Node ID " << static_cast<int32_t>(common::get_node_id_from_name(name))
-                                  << " receive request for node_id " << req.node_id() << std::endl;
+
                         if (req.node_id() == static_cast<int32_t>(common::get_node_id_from_name(name)))
                         {
-                            std::cout << "Request successfully receive in " << name << std::endl;
-                            std::cout << "Configuring..." << std::endl;
                             types::ResponseType res;
                             req_res_listener_.on_configuration_request(req, res);
                             req_res_->write_res(res.get_impl());
                         }
-                    }, "sustainml/response", "sustainml/request");
+                    }, "sustainml/response", "sustainml/request", &req_data_);
 
     if (!init(name))
     {
@@ -127,19 +122,14 @@ NodeImpl::NodeImpl(
                         RequestTypeImpl* in = static_cast<RequestTypeImpl*>(input);
                         types::RequestType req;
                         req = in;
-                        std::cout << "Size of request received: " << sizeof(req) << " bytes" << std::endl;
-                        std::cout << "Configuration received: " << static_cast<RequestTypeImpl*>(input)->configuration() << std::endl;
-                        std::cout << "Node ID " << static_cast<int32_t>(common::get_node_id_from_name(name))
-                                  << " receive request for node_id " << req.node_id() << std::endl;
+
                         if (req.node_id() == static_cast<int32_t>(common::get_node_id_from_name(name)))
                         {
-                            std::cout << "Request successfully receive in " << name << std::endl;
-                            std::cout << "Configuring..." << std::endl;
                             types::ResponseType res;
                             req_res_listener_.on_configuration_request(req, res);
                             req_res_->write_res(res.get_impl());
                         }
-                    }, "sustainml/response", "sustainml/request");
+                    }, "sustainml/response", "sustainml/request", &req_data_);
 
     if (!init(name, opts))
     {
diff --git a/sustainml_cpp/src/cpp/core/NodeImpl.hpp b/sustainml_cpp/src/cpp/core/NodeImpl.hpp
index 5b9c2b3..458f344 100644
--- a/sustainml_cpp/src/cpp/core/NodeImpl.hpp
+++ b/sustainml_cpp/src/cpp/core/NodeImpl.hpp
@@ -170,6 +170,8 @@ class NodeImpl
 
     RequestReplyListener& req_res_listener_;
 
+    RequestTypeImpl req_data_;
+
 private:
 
     /**
diff --git a/sustainml_cpp/src/cpp/core/RequestReplier.cpp b/sustainml_cpp/src/cpp/core/RequestReplier.cpp
index 50e2f18..4fd597f 100644
--- a/sustainml_cpp/src/cpp/core/RequestReplier.cpp
+++ b/sustainml_cpp/src/cpp/core/RequestReplier.cpp
@@ -29,10 +29,12 @@ namespace core {
 RequestReplier::RequestReplier(
     std::function<void(void*)> callback,
     const char* topicw,
-    const char* topicr)
+    const char* topicr,
+    void* data)
     : callback_(callback)
     , topicw_(topicw)
     , topicr_(topicr)
+    , data_(data)
     , participant_(nullptr)
     , typeRes_(new ResponseTypeImplPubSubType())
     , typeReq_(new RequestTypeImplPubSubType())
@@ -58,13 +60,13 @@ RequestReplier::RequestReplier(
     // Create a Topics
     if(std::string(topicw_) == "sustainml/request")
     {
-    topicR_= participant_->create_topic(topicr_, typeRes_.get_type_name(), TOPIC_QOS_DEFAULT);
-    topicW_= participant_->create_topic(topicw_, typeReq_.get_type_name(), TOPIC_QOS_DEFAULT);
+        topicR_= participant_->create_topic(topicr_, typeRes_.get_type_name(), TOPIC_QOS_DEFAULT);
+        topicW_= participant_->create_topic(topicw_, typeReq_.get_type_name(), TOPIC_QOS_DEFAULT);
     }
     else
     {
-    topicR_= participant_->create_topic(topicr_, typeReq_.get_type_name(), TOPIC_QOS_DEFAULT);
-    topicW_= participant_->create_topic(topicw_, typeRes_.get_type_name(), TOPIC_QOS_DEFAULT);
+        topicR_= participant_->create_topic(topicr_, typeReq_.get_type_name(), TOPIC_QOS_DEFAULT);
+        topicW_= participant_->create_topic(topicw_, typeRes_.get_type_name(), TOPIC_QOS_DEFAULT);
     }
 
     // Configure DataReader QoS
@@ -122,39 +124,13 @@ void RequestReplier::RequestReplyControlListener::on_data_available(
 {
     // Create a data and SampleInfo instance
     SampleInfo info;
-    void* data;
-
-    if (reader->get_topicdescription()->get_type_name() == node_->typeReq_.get_type_name())
-    {
-        data = &req_;
-
-    }
-    else if (reader->get_topicdescription()->get_type_name() == node_->typeRes_.get_type_name())
-    {
-        data = &res_;
-    }
-    else
-    {
-        return;
-    }
 
     // Keep taking data until there is nothing to take
-    while (reader->take_next_sample(data, &info) == RETCODE_OK)
+    while (reader->take_next_sample(node_->data_, &info) == RETCODE_OK)
     {
         if (info.valid_data)
         {
-            std::cout << "Received new data value for topic "
-                << reader->get_topicdescription()->get_name()
-                << " with type "
-                << reader->get_topicdescription()->get_type_name()
-                << std::endl;
-            node_->callback_(data);
-        }
-        else
-        {
-            std::cout << "Remote writer for topic "
-                << reader->get_topicdescription()->get_name()
-                << " is dead" << std::endl;
+            node_->callback_(node_->data_);
         }
     }
 }
diff --git a/sustainml_cpp/src/cpp/orchestrator/OrchestratorNode.cpp b/sustainml_cpp/src/cpp/orchestrator/OrchestratorNode.cpp
index 1acb65b..b523e3c 100644
--- a/sustainml_cpp/src/cpp/orchestrator/OrchestratorNode.cpp
+++ b/sustainml_cpp/src/cpp/orchestrator/OrchestratorNode.cpp
@@ -120,15 +120,13 @@ OrchestratorNode::OrchestratorNode(
                         ResponseTypeImpl* in = static_cast<ResponseTypeImpl*>(input);
                         types::ResponseType res;
                         res = in;
-                        std::cout << "Size of response received: " << sizeof(res) << " bytes" << std::endl;
-                        std::cout << "Configuration received: " << static_cast<ResponseTypeImpl*>(input)->configuration() << std::endl;
-                        std::cout << "Response receive response from node_id " << res.node_id() << std::endl;
+
                         {
                             std::lock_guard<std::mutex> lock(this->mtx_);
                             this->res_ = res;
                         }
                         this->cv_.notify_all();
-                    }, "sustainml/request", "sustainml/response");
+                    }, "sustainml/request", "sustainml/response", res_.get_impl());
 
     if (!init())
     {