#![crate_name = "syncpub"]

fn main() {
    let context = zmq::Context::new();

    //socket to talk to clients
    let publisher = context.socket(zmq::PUB).unwrap();
    publisher.set_sndhwm(1_100_000).expect("failed setting hwm");
    publisher
        .bind("tcp://*:5561")
        .expect("failed binding publisher");

    //socket to receive signals
    let syncservice = context.socket(zmq::REP).unwrap();
    syncservice
        .bind("tcp://*:5562")
        .expect("failed binding syncservice");

    //get syncronization from subscribers
    println!("Waiting for subscribers");
    for _ in 0..10 {
        syncservice.recv_msg(0).expect("failed receiving sync");
        syncservice.send("", 0).expect("failed sending sync");
    }
    //now broadcast 1M updates followed by end
    println!("Broadcasting messages");
    for _ in 0..1_000_000 {
        publisher.send("Rhubarb", 0).expect("failed broadcasting");
    }
    publisher.send("END", 0).expect("failed sending end");
}
