blob: d2859a88fbe3db3e94204cc2c2553c347ed185dd [file] [log] [blame]
Adam Snaider43516782023-06-26 15:14:18 -07001use aos_configuration as config;
2use aos_events_event_loop_runtime::{EventLoopRuntime, Sender, Watcher};
3use aos_events_shm_event_loop::ShmEventLoop;
Adam Snaider43516782023-06-26 15:14:18 -07004use futures::never::Never;
5use std::path::Path;
6
7use ping_rust_fbs::aos::examples as ping;
8use pong_rust_fbs::aos::examples as pong;
9
10fn main() {
11 aos_init::init();
12 let config = config::read_config_from(Path::new("pingpong_config.json")).unwrap();
13 ShmEventLoop::new(&config).run_with(|runtime| {
14 let task = pong(runtime);
15 runtime.spawn(task);
16 });
17}
18
19/// Responds to ping messages with an equivalent pong.
Adam Snaiderde51c672023-09-28 21:55:43 -070020async fn pong(event_loop: &EventLoopRuntime<'_>) -> Never {
Adam Snaider43516782023-06-26 15:14:18 -070021 // The watcher gives us incoming ping messages.
22 let mut ping_watcher: Watcher<ping::Ping> = event_loop.make_watcher("/test").unwrap();
23
24 // The sender is used to send messages back to the pong channel.
25 let mut pong_sender: Sender<pong::Pong> = event_loop.make_sender("/test").unwrap();
Adam Snaider43516782023-06-26 15:14:18 -070026
Adam Snaiderde51c672023-09-28 21:55:43 -070027 event_loop.on_run().await;
28 loop {
29 let ping = dbg!(ping_watcher.next().await);
Adam Snaider43516782023-06-26 15:14:18 -070030
Adam Snaiderde51c672023-09-28 21:55:43 -070031 let mut builder = pong_sender.make_builder();
32 let mut pong = pong::PongBuilder::new(builder.fbb());
33 pong.add_value(ping.message().unwrap().value());
34 pong.add_initial_send_time(event_loop.monotonic_now().into());
35 let pong = pong.finish();
36 builder.send(pong).expect("Can't send pong reponse");
Adam Snaider43516782023-06-26 15:14:18 -070037 }
38}