Skip to main content

pub/
pub.rs

1use ratpub::Node;
2use ros2_interfaces_jazzy_rkyv::std_msgs::msg;
3
4#[tokio::main]
5async fn main() -> anyhow::Result<()> {
6    mt_sea::init_logging();
7
8    let node = Node::create("node1".to_owned()).await?;
9    let pubber = node
10        .create_publisher::<msg::String>("/some_topic".to_owned())
11        .await?;
12    let mut subber = node
13        .create_subscriber::<msg::String>("/another_topic".to_owned(), 10)
14        .await?;
15    let mut subber2 = node
16        .create_subscriber::<msg::String>("/boring_topic".to_owned(), 10)
17        .await?;
18    let mut useless_subber = node
19        .create_subscriber::<msg::String>("/nothing_here".to_owned(), 10)
20        .await?;
21
22    let msg = msg::String {
23        data: "heyhio".to_owned(),
24    };
25
26    tokio::spawn(async move {
27        while useless_subber.next().await.is_some() {
28            log::error!("ehh.. no?");
29        }
30    });
31
32    let mut pubbing = tokio::time::interval(std::time::Duration::from_secs(1));
33    loop {
34        tokio::select! {
35            _ = pubbing.tick() => {
36                pubber.publish(&msg).await?;
37            }
38            msg_in = subber.next() => {
39                match msg_in {
40                    Some(msg_in) => {
41                        println!("Got: {}", msg_in.data);
42                    },
43                    None => {
44                        break;
45                    },
46                }
47            }
48            msg_in = subber2.next() => {
49                match msg_in {
50                    Some(msg_in) => {
51                        println!("Got: {}", msg_in.data);
52                    },
53                    None => {
54                        break;
55                    },
56                }
57            }
58        }
59    }
60
61    Ok(())
62}