use nng::{Error, Protocol, Socket};
use std::{env, process, str, thread, time::Duration};
fn main() -> Result<(), Error> {
let args: Vec<_> = env::args().collect();
if args.len() < 3 {
println!("Usage: bus <NODE_NAME> <URL> <URL> ...");
process::exit(1);
}
node(&args[1], &args[2], &args[2..])
}
fn node(name: &str, listen: &str, dial: &[String]) -> Result<(), Error> {
let s = Socket::new(Protocol::Bus0)?;
s.listen(listen)?;
thread::sleep(Duration::from_secs(1));
for peer in dial {
s.dial(peer)?;
}
println!("{0}: SENDING \"{0}\" ONTO BUS", name);
s.send(name.as_bytes())?;
loop {
let msg = s.recv()?;
let peer = str::from_utf8(&msg).expect("invalid UTF-8");
println!("{}: RECEIVED \"{}\" FROM BUS", name, peer);
}
}