blob: 6451b7bbdfae5d7e4d29cd101ca736c06b5ef76a [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;
20
21 let mut builder = pong_sender.make_builder();
22 let mut pong = pong::PongBuilder::new(builder.fbb());
23 pong.add_value(ping.message().unwrap().value());
24 pong.add_initial_send_time(event_loop.monotonic_now().into());
25 let pong = pong.finish();
26 builder.send(pong).expect("Can't send pong reponse");
27 }
28}