From 9b4ede086a6e0a3e5ea27786de0f5bb0fccbe856 Mon Sep 17 00:00:00 2001 From: Michael Edwards Date: Mon, 25 Mar 2019 20:27:30 +0100 Subject: [PATCH] Server time delta is a signed integer Fixes #322 --- connect/src/spirc.rs | 3 ++- core/src/session.rs | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/connect/src/spirc.rs b/connect/src/spirc.rs index a99a47e..b888461 100644 --- a/connect/src/spirc.rs +++ b/connect/src/spirc.rs @@ -399,7 +399,8 @@ impl SpircTask { Ok(dur) => dur, Err(err) => err.duration(), }; - ((dur.as_secs() + self.session.time_delta()) * 1000 + (dur.subsec_nanos() / 1000_000) as u64) as i64 + ((dur.as_secs() as i64 + self.session.time_delta()) * 1000 + + (dur.subsec_nanos() / 1000_000) as i64) } fn handle_command(&mut self, cmd: SpircCommand) { diff --git a/core/src/session.rs b/core/src/session.rs index 1304296..51b10fb 100644 --- a/core/src/session.rs +++ b/core/src/session.rs @@ -21,7 +21,7 @@ use mercury::MercuryManager; struct SessionData { country: String, - time_delta: u64, + time_delta: i64, canonical_username: String, invalid: bool, } @@ -150,7 +150,7 @@ impl Session { self.0.mercury.get(|| MercuryManager::new(self.weak())) } - pub fn time_delta(&self) -> u64 { + pub fn time_delta(&self) -> i64 { self.0.data.read().unwrap().time_delta } @@ -176,11 +176,12 @@ impl Session { fn dispatch(&self, cmd: u8, data: Bytes) { match cmd { 0x4 => { - let server_timestamp = BigEndian::read_u32(data.as_ref()) as u64; + let server_timestamp = BigEndian::read_u32(data.as_ref()) as i64; let timestamp = match SystemTime::now().duration_since(UNIX_EPOCH) { Ok(dur) => dur, Err(err) => err.duration(), - }.as_secs() as u64; + } + .as_secs() as i64; self.0.data.write().unwrap().time_delta = server_timestamp - timestamp;