Newer
Older
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),
}
}
}