netsim-embed 0.9.1

Network simulator.
Documentation
use anyhow::Result;
use async_trait::async_trait;
use netsim_embed_cli::{run_server, Server};
use std::io::IoSliceMut;
use std::net::SocketAddrV4;
use udp_socket::{RecvMeta, UdpSocket};

pub struct UdpServer {
    socket: UdpSocket,
}

#[async_trait]
impl Server for UdpServer {
    async fn start() -> Result<Self> {
        let addr = SocketAddrV4::new(0.into(), 3000);
        let socket = UdpSocket::bind(addr.into())?;
        Ok(Self { socket })
    }

    async fn run(&mut self) -> Result<()> {
        let mut meta = [RecvMeta::default()];
        let mut data = [0; 16];
        let mut buffer = [IoSliceMut::new(&mut data[..])];
        for _ in 0..3 {
            println!("receiving");
            self.socket.recv(&mut buffer, &mut meta).await?;
            let slice = &buffer[0][..meta[0].len];
            println!("received {slice:?}");
        }
        Ok(())
    }
}

#[async_std::main]
async fn main() -> Result<()> {
    run_server::<UdpServer>().await
}