Files
open-xiaoai/apps/hello/src/sync.rs
T
2025-12-31 22:53:33 +08:00

35 lines
962 B
Rust

use std::time::{SystemTime, UNIX_EPOCH};
pub fn now_us() -> u128 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Time went backwards")
.as_micros()
}
pub struct ClockSync {
pub offset: i128, // server_time - client_time
}
impl ClockSync {
pub fn new() -> Self {
Self { offset: 0 }
}
pub fn update(&mut self, client_send_ts: u128, server_ts: u128, client_recv_ts: u128) {
let rtt = (client_recv_ts - client_send_ts) as i128;
// Estimated server time when client_recv_ts occurred: server_ts + rtt/2
let estimated_server_now = server_ts as i128 + rtt / 2;
self.offset = estimated_server_now - client_recv_ts as i128;
}
pub fn to_server_time(&self, client_time: u128) -> u128 {
(client_time as i128 + self.offset) as u128
}
pub fn to_client_time(&self, server_time: u128) -> u128 {
(server_time as i128 - self.offset) as u128
}
}