Basic Publisher/Subscriber Example

This example demonstrates a simple publisher and subscriber using AstuteDDS.

Define Data Type (IDL)

// hello.idl
module HelloWorld {
    struct Message {
        @key long id;
        string text;
    };
};

Compile IDL

./build/tools/idl_compiler/astutedds-idl hello.idl

Publisher

#include "Message.hpp"
#include "Message_TypeSupport.hpp"
#include <astutedds/dcps/domain_participant.hpp>
#include <astutedds/dcps/publisher.hpp>

int main() {
    // Create participant
    auto participant = astutedds::dcps::create_participant(0);

    // Create topic
    auto topic = participant->create_topic<HelloWorld::Message>("HelloTopic");

    // Create publisher and writer
    auto publisher = participant->create_publisher();
    auto writer = publisher->create_datawriter(topic);

    // Write data
    HelloWorld::Message msg;
    msg.id = 1;
    msg.text = "Hello, DDS!";
    writer->write(msg);

    std::cout << "Published: " << msg.text << std::endl;

    return 0;
}

Subscriber

#include "Message.hpp"
#include "Message_TypeSupport.hpp"
#include <astutedds/dcps/domain_participant.hpp>
#include <astutedds/dcps/subscriber.hpp>

int main() {
    // Create participant
    auto participant = astutedds::dcps::create_participant(0);

    // Create topic
    auto topic = participant->create_topic<HelloWorld::Message>("HelloTopic");

    // Create subscriber and reader
    auto subscriber = participant->create_subscriber();
    auto reader = subscriber->create_datareader(topic);

    // Read data
    std::vector<HelloWorld::Message> samples;
    while (true) {
        reader->take(samples);
        for (const auto& msg : samples) {
            std::cout << "Received: " << msg.text << std::endl;
        }
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}

Build and Run

# Compile publisher
g++ -std=c++20 publisher.cpp -o publisher -I. -lastutedds

# Compile subscriber  
g++ -std=c++20 subscriber.cpp -o subscriber -I. -lastutedds

# Run in separate terminals
./publisher
./subscriber