proc-graph

Crates.ioproc-graph
lib.rsproc-graph
version0.1.0
sourcesrc
created_at2020-02-03 23:26:39.716466
updated_at2020-02-03 23:26:39.716466
descriptionConvert a process graph into a set of communicating processes
homepage
repositoryhttps://github.com/auxoncorp/proc-graph
max_upload_size
id204613
size18,951
Jon (jonlamb-gh)

documentation

README

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.

Commit count: 12

cargo fmt