[][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.