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