Skip to content
Snippets Groups Projects
server.rs 1.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • use std::error::Error;
    use std::net::UdpSocket;
    use std::time::{SystemTime, UNIX_EPOCH};
    
    use netem_evaluator::Message;
    
    fn main() -> Result<(), Box<dyn Error>> {
        let socket = UdpSocket::bind("0.0.0.0:6789")?;
        eprintln!("Listening on :6789");
    
        let mut buffer = [0u8; 1000];
    
        loop {
            match socket.recv(&mut buffer) {
                Ok(received) => {
                    let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_nanos();
    
                    let mut message: Message = bincode::deserialize(&buffer[..received])?;
                    message.timestamp = now - message.timestamp; // Abuse timestamp field to store time difference
    
                    // let time_diff_micros = (now - message.timestamp) as f64 / 1000.;
                    // let id = message.id;
                    // println!("Received packet #{id} - Time difference: {time_diff_micros:.3} µs");
                    println!("{}", serde_json::to_string(&message)?);
                    let server_time_per_request =
                        SystemTime::now().duration_since(UNIX_EPOCH)?.as_nanos() - now;
                    // println!(
                    //     "{} ms time needed for server to handle request",
                    //     server_time_per_request as f64 / 1000000.
                    // );
                    assert!(server_time_per_request < 10000000); // if this bites you, you should choose a higher value for TIME_BETWEEN_MESSAGES_IN_MICRO_SECONDS
                }
                Err(e) => eprintln!("Error receiving: {}", e),
            }
        }
    }