lattice/
lattice.rs

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}