[−][src]Crate proc_graph
A small library which converts a process graph into a set of communicating processes.
use std::{thread, time::Duration}; use proc_graph::Network; env_logger::init(); let mut net = Network::new(); net.add_process("a", vec!["b", "c"], |senders, _| loop { thread::sleep(Duration::from_secs(1)); for (adj, s) in senders.iter() { println!("a is sending to {}", adj); s.send(("a".to_string(), ())) .expect("shouldn't encounter a closed channel"); } }); net.add_process("b", vec!["d"], |senders, receiver| loop { thread::sleep(Duration::from_secs(1)); let (sender, _) = receiver .recv() .expect("shouldn't encounter a closed channel"); println!("b received from {}", sender); for s in senders.values() { s.send(("b".to_string(), ())) .expect("shouldn't encounter a closed channel"); } }); net.add_process("c", vec!["d"], |senders, receiver| loop { thread::sleep(Duration::from_secs(1)); let (sender, _) = receiver .recv() .expect("shouldn't encounter a closed channel"); println!("c received from {}", sender); for s in senders.values() { s.send(("c".to_string(), ())) .expect("shouldn't encounter a closed channel"); } }); net.add_process("d", vec![], |_, receiver| loop { thread::sleep(Duration::from_secs(1)); let (sender, _) = receiver .recv() .expect("shouldn't encounter a closed channel"); println!("d received from {}", sender); }); net.start();
Structs
Network | A network of processes. Each process has a mailbox and the set of addresses (senders) it needs to communicate with its neighbors. |