mctx-core 0.1.2

Runtime-agnostic and portable IPv4 multicast sender library.
Documentation
use mctx_core::{Context, PublicationConfig};
use std::env;
use std::error::Error;
use std::net::Ipv4Addr;
use std::thread;
use std::time::Duration;

fn main() -> Result<(), Box<dyn Error>> {
    let mut args = env::args().skip(1);

    let group: Ipv4Addr = args.next().ok_or("missing multicast group")?.parse()?;
    let port: u16 = args.next().ok_or("missing destination port")?.parse()?;
    let payload = args.next().ok_or("missing payload")?;
    let count: u64 = args
        .next()
        .map(|value| value.parse())
        .transpose()?
        .unwrap_or(1);
    let interval_ms: u64 = args
        .next()
        .map(|value| value.parse())
        .transpose()?
        .unwrap_or(0);

    let mut context = Context::new();
    let id = context.add_publication(PublicationConfig::new(group, port))?;
    let interval = Duration::from_millis(interval_ms);

    for _ in 0..count {
        let report = context.send(id, payload.as_bytes())?;
        println!("sent {} bytes to {}", report.bytes_sent, report.destination);

        if !interval.is_zero() {
            thread::sleep(interval);
        }
    }

    Ok(())
}