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}