1use std::{thread, time::Duration};
2
3use log::info;
4
5use proc_graph::Network;
6
7fn main() {
8 env_logger::init();
9
10 let mut net = Network::new();
11
12 net.add_process("a", vec!["b", "c"], |senders, _| loop {
13 thread::sleep(Duration::from_secs(1));
14 for (adj, s) in senders.iter() {
15 info!("a is sending to {}", adj);
16 s.send(("a".to_string(), ()))
17 .expect("shouldn't encounter a closed channel");
18 }
19 });
20
21 net.add_process("b", vec!["d"], |senders, receiver| loop {
22 thread::sleep(Duration::from_secs(1));
23 let (sender, _) = receiver
24 .recv()
25 .expect("shouldn't encounter a closed channel");
26 info!("b received from {}", sender);
27 for s in senders.values() {
28 s.send(("b".to_string(), ()))
29 .expect("shouldn't encounter a closed channel");
30 }
31 });
32
33 net.add_process("c", vec!["d"], |senders, receiver| loop {
34 thread::sleep(Duration::from_secs(1));
35 let (sender, _) = receiver
36 .recv()
37 .expect("shouldn't encounter a closed channel");
38 info!("c received from {}", sender);
39 for s in senders.values() {
40 s.send(("c".to_string(), ()))
41 .expect("shouldn't encounter a closed channel");
42 }
43 });
44
45 net.add_process("d", vec![], |_, receiver| loop {
46 thread::sleep(Duration::from_secs(1));
47 let (sender, _) = receiver
48 .recv()
49 .expect("shouldn't encounter a closed channel");
50 info!("d received from {}", sender);
51 });
52
53 net.start_and_wait();
54}