blob: 8a0587a22fdfe82e2a67207c90541d2b873c7445 [file] [log] [blame]
Adam Snaidercc622812023-11-07 17:59:27 -08001use aos::events::event_loop_runtime::{EventLoopRuntime, Sender, Watcher};
Adam Snaiderc5bdbd32023-10-19 18:20:56 -06002use futures::never::Never;
3use std::borrow::Borrow;
4
5use ping_rust_fbs::aos::examples as ping;
6use pong_rust_fbs::aos::examples as pong;
7
8/// Responds to ping messages with an equivalent pong.
9pub async fn pong(event_loop: EventLoopRuntime<'_>) -> Never {
10 // The watcher gives us incoming ping messages.
11 let mut ping_watcher: Watcher<ping::Ping> = event_loop.make_watcher("/test").unwrap();
12
13 // The sender is used to send messages back to the pong channel.
14 let mut pong_sender: Sender<pong::Pong> = event_loop.make_sender("/test").unwrap();
15
16 let on_run = event_loop.on_run();
17 on_run.borrow().await;
18 loop {
19 let ping = ping_watcher.next().await;
Adam Snaider9121b302023-12-14 15:30:54 -080020 let ping = ping.message().unwrap();
21 log::info!("Got ping: {}", ping.value());
Adam Snaiderc5bdbd32023-10-19 18:20:56 -060022
23 let mut builder = pong_sender.make_builder();
24 let mut pong = pong::PongBuilder::new(builder.fbb());
Adam Snaider9121b302023-12-14 15:30:54 -080025 pong.add_value(ping.value());
Adam Snaiderc5bdbd32023-10-19 18:20:56 -060026 pong.add_initial_send_time(event_loop.monotonic_now().into());
27 let pong = pong.finish();
28 builder.send(pong).expect("Can't send pong reponse");
29 }
30}