#communicating #process #convert #graph #set #proc #networking

proc-graph

Convert a process graph into a set of communicating processes

1 unstable release

0.1.0 Feb 3, 2020

#37 in #communicating

Custom license

9KB
97 lines

proc-graph

Overview

A small library which converts a process graph into a set of communicating processes.

Getting Started

# Cargo.toml

[dependencies]
proc-graph = "0.1"

Usage

use std::{thread, time::Duration};

use proc_graph::Network;

fn main() {
    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();
}

License

proc-graph is licensed under the MIT License (MIT) unless otherwise noted. Please see LICENSE for more details.

Dependencies

~2–10MB
~97K SLoC