1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use chrono::Utc; pub fn current_timestamp() -> f64 { Utc::now().timestamp_nanos() as f64 / 1_000_000_000.0 } #[derive(Default)] pub struct NetworkTiming { pub average_roundtrip: Option<f64>, pub average_server_timestamp_delta: Option<f64>, } impl NetworkTiming { pub fn update(&mut self, original_timestamp: f64, timestamp: f64) { let now = current_timestamp(); let roundtrip = now - original_timestamp; self.average_roundtrip = Some(match self.average_roundtrip { Some(average_roundtrip) => (average_roundtrip * 4.0 + roundtrip) / 5.0, None => roundtrip, }); let timestamp_delta = (now - timestamp) - roundtrip / 2.0; self.average_server_timestamp_delta = Some(match self.average_server_timestamp_delta { Some(average_server_timestamp_delta) => { (average_server_timestamp_delta * 4.0 + timestamp_delta) / 5.0 } None => timestamp_delta, }); } }