mctx-core 0.2.4

Runtime-agnostic and portable IPv4 and IPv6 multicast sender library.
Documentation
#[path = "common/send_args.rs"]
mod send_args;

use mctx_core::{Context, TokioPublication};
use std::env;
use std::error::Error;
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let args: Vec<String> = env::args().collect();
    let parsed = match send_args::parse_send_cli_args(&args) {
        Ok(parsed) => parsed,
        Err(err) => {
            send_args::print_usage(&args[0], false);
            return Err(err.into());
        }
    };

    let mut context = Context::new();
    let id = context.add_publication(parsed.build_config()?)?;
    let publication = context.take_publication(id).unwrap();
    let publication = TokioPublication::new(publication)?;
    let interval = Duration::from_millis(parsed.interval_ms);

    for _ in 0..parsed.count {
        let report = publication.send(parsed.payload.as_bytes()).await?;
        println!(
            "sent {} bytes to {} from {:?}",
            report.bytes_sent, report.destination, report.source_addr
        );

        if !interval.is_zero() {
            tokio::time::sleep(interval).await;
        }
    }

    Ok(())
}