2.2.7. Model Manager Receiver Node

This kind of Node performs the active (client) action of Collaborative Learning Scenario. This node receives statistics about models and sends a request if it is interested in a particular one. Then, waits for the arrival of the requested model, serialized as Model Reply Data Type. Example of Usage Steps

  • Create the Id of the node.

  • Create the data to request.

  • Instantiate the ModelManagerReceiver Node creating an object of such class with the Id and data previously created.

  • Start the execution of the node.

  • Wait for a model reply.

  • Stop the execution of the node.

#include <cpp_utils/wait/BooleanWaitHandler.hpp>

#include <amlip_cpp/types/id/AmlipIdDataType.hpp>
#include <amlip_cpp/types/model/ModelRequestDataType.hpp>
#include <amlip_cpp/types/model/ModelReplyDataType.hpp>
#include <amlip_cpp/types/model/ModelStatisticsDataType.hpp>

#include <amlip_cpp/node/collaborative_learning/ModelManagerReceiverNode.hpp>

class CustomModelListener : public eprosima::amlip::node::ModelListener

            const std::shared_ptr<eprosima::utils::event::BooleanWaitHandler>& waiter)
        : waiter_(waiter)
        // Do nothing

    virtual bool statistics_received (
            const eprosima::amlip::types::ModelStatisticsDataType statistics) override
        // Always request model
        return true;

    virtual bool model_received (
            const eprosima::amlip::types::ModelReplyDataType model) override
        std::cout << "Model received: " << model << " ." << std::endl;


        return true;

    std::shared_ptr<eprosima::utils::event::BooleanWaitHandler> waiter_;

// Create the Id of the node
eprosima::amlip::types::AmlipIdDataType id({"ModelManagerSender"}, {10, 20, 30, 40});

// Create the data
eprosima::amlip::types::ModelRequestDataType data("MobileNet V1");

// Create ModelManagerReceiver Node
eprosima::amlip::node::ModelManagerReceiverNode model_receiver_node(id, data);

// Create waiter
std::shared_ptr<eprosima::utils::event::BooleanWaitHandler> waiter =
    std::make_shared<eprosima::utils::event::BooleanWaitHandler>(false, true);

// Create listener to process statistics and replies
std::shared_ptr<CustomModelListener> listener =

// Start execution

// Wait for solution

// Stop execution