shapes_demo_subscriber/
shapes_demo_subscriber.rs1#![allow(clippy::print_stdout, clippy::print_stderr)]
8
9use std::env;
10use std::time::Duration;
11
12use zerodds_dcps::interop::ShapeType;
13use zerodds_dcps::{
14 DataReaderQos, DdsError, DomainParticipantFactory, DomainParticipantQos, SubscriberQos,
15 TopicQos,
16};
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19 let args: Vec<String> = env::args().collect();
20 let topic_name = args.get(1).map_or("Square", String::as_str);
21 let domain_id: i32 = args.get(2).and_then(|s| s.parse().ok()).unwrap_or(0);
22
23 let factory = DomainParticipantFactory::instance();
24 let participant = factory.create_participant(domain_id, DomainParticipantQos::default())?;
25 let topic = participant.create_topic::<ShapeType>(topic_name, TopicQos::default())?;
26 let subscriber = participant.create_subscriber(SubscriberQos::default());
27 let reader = subscriber.create_datareader::<ShapeType>(&topic, DataReaderQos::default())?;
28
29 println!("shapes_demo_subscriber: Topic={topic_name} Domain={domain_id} — Ctrl-C to stop");
30
31 loop {
32 match reader.wait_for_data(Duration::from_secs(1)) {
33 Ok(()) => {
34 for sample in reader.take()? {
35 println!(
36 " <- color={:8} x={:4} y={:4} size={}",
37 sample.color, sample.x, sample.y, sample.shapesize
38 );
39 }
40 }
41 Err(DdsError::Timeout) => {}
42 Err(e) => return Err(e.into()),
43 }
44 }
45}