node-rs 0.1.4

Rust bindings for node.js using stdweb
extern crate node_rs;
extern crate stdweb;

use node_rs::{cluster, Promise};

fn main() {
    stdweb::initialize();

    assert!(
        !cluster::is_worker(),
        "This module should not be instantiated as a worker!"
    );

    cluster::setup_master(
        cluster::ClusterSettingsBuilder::new()
            .exec(node_rs::dirname().join("worker.js"))
            .build(),
    );

    println!("I'm the master!");

    let args: Vec<_> = std::env::args().collect();

    let num_procs = if args.len() >= 2 {
        args[1].parse().expect("First argument must be an integer.")
    } else {
        4
    };

    let workers: Vec<_> = (0..num_procs).map(|_| cluster::fork()).collect();

    let promises: Vec<_> = workers
        .iter()
        .cloned()
        .map(|worker| {
            Promise::new(move |resolve, _| {
                worker.on_exit(move |_, _| {
                    resolve.complete();
                });
            })
        })
        .collect();

    Promise::all(&promises).then(|_| {
        println!("Master exiting...");
        stdweb::Value::Undefined
    });

    stdweb::event_loop();
}