File topic_route.hpp
File List > astutedds > routing > topic_route.hpp
Go to the documentation of this file
//
// Copyright (c) 2026, Astute Systems PTY LTD
//
// This file is part of the Astute DDS developed by Astute Systems.
//
// See the commercial LICENSE file in the project root for full license details.
//
// @file topic_route.hpp
// @brief TopicRoute: bridges a single topic between two DomainParticipants.
//
// A TopicRoute subscribes to one topic on the input participant and
// republishes every received sample on the output participant. An optional
// TransformPlugin may modify or drop samples before forwarding.
//
#ifndef ASTUTEDDS_ROUTING_TOPIC_ROUTE_HPP
#define ASTUTEDDS_ROUTING_TOPIC_ROUTE_HPP
#include <astutedds/routing/routing_config.hpp>
#include <astutedds/routing/transform_plugin.hpp>
#include <astutedds/dcps/dcps.hpp>
#include <atomic>
#include <memory>
#include <string>
namespace astutedds::routing
{
class TopicRoute
{
public:
TopicRoute(const TopicRouteConfig& cfg,
dcps::DomainParticipant* input_participant,
dcps::DomainParticipant* output_participant);
~TopicRoute();
// Non-copyable, non-movable (owns raw DDS entity pointers)
TopicRoute(const TopicRoute&) = delete;
TopicRoute& operator=(const TopicRoute&) = delete;
TopicRoute(TopicRoute&&) = delete;
TopicRoute& operator=(TopicRoute&&) = delete;
bool start();
void stop();
// ── Optional transform ────────────────────────────────────────────────
void set_transform(std::unique_ptr<TransformPlugin> plugin);
// ── Accessors ─────────────────────────────────────────────────────────
const TopicRouteConfig& config() const { return config_; }
bool is_running() const { return running_.load(); }
uint64_t samples_routed() const { return samples_routed_.load(); }
uint64_t samples_dropped() const { return samples_dropped_.load(); }
private:
void on_data_available(const dcps::ReceivedSample& sample);
TopicRouteConfig config_;
dcps::DomainParticipant* input_participant_;
dcps::DomainParticipant* output_participant_;
// DDS entities (non-owning; owned by the respective participants)
dcps::Topic* input_topic_{nullptr};
dcps::Topic* output_topic_{nullptr};
dcps::Subscriber* subscriber_{nullptr};
dcps::Publisher* publisher_{nullptr};
dcps::DataReader* reader_{nullptr};
dcps::DataWriter* writer_{nullptr};
std::unique_ptr<TransformPlugin> transform_;
std::atomic<bool> running_{false};
std::atomic<uint64_t> samples_routed_{0};
std::atomic<uint64_t> samples_dropped_{0};
};
} // namespace astutedds::routing
#endif // ASTUTEDDS_ROUTING_TOPIC_ROUTE_HPP