From 36d214df6cffaeee1920c0eb4cb7379c5d1abdf4 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 14 Oct 2020 20:16:13 +0100 Subject: [PATCH] timestamps in log in state Signed-off-by: Ian Jackson --- src/gamestate.rs | 18 +++++++++++++++++- src/session.rs | 2 +- src/updates.rs | 6 +++++- templates/session.tera | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index 9446a4e5..bebb4b16 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -23,6 +23,10 @@ visible_slotmap_key!{ VisiblePieceId('.') } #[serde(transparent)] pub struct Html (pub String); +#[derive(Copy,Clone,Debug,Serialize,Deserialize,Eq,Ord,PartialEq,PartialOrd)] +#[serde(transparent)] +pub struct Timestamp(pub u64); /* time_t */ + pub const DEFAULT_TABLE_SIZE : Pos = PosC([ 400, 200 ]); // ---------- general data types ---------- @@ -41,7 +45,7 @@ pub struct GameState { pub pieces : Pieces, pub players : PlayerMap, pub gen : Generation, - pub log : Vec<(Generation,Arc)>, // xxx expiry + pub log : Vec<(Generation, Timestamp, Arc)>, // xxx expiry pub max_z : ZCoord, } @@ -149,6 +153,18 @@ impl Display for Generation { } } +impl Timestamp { + /// Always >= previously + pub fn now() -> Timestamp { + use std::time::SystemTime; + let now = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs(); + Timestamp(now) + } +} + pub trait ClampTable : Sized { fn clamped(self, range: Self) -> (Self, bool); } diff --git a/src/session.rs b/src/session.rs index a940e2dc..f9b959ec 100644 --- a/src/session.rs +++ b/src/session.rs @@ -14,7 +14,7 @@ struct SessionRenderContext { defs : Vec<(VisiblePieceId,Html)>, nick : String, load : String, - log : Vec<(Generation,Arc)>, + log : Vec<(Generation, Timestamp, Arc)>, } #[derive(Serialize,Debug)] diff --git a/src/updates.rs b/src/updates.rs index 45113316..1984d333 100644 --- a/src/updates.rs +++ b/src/updates.rs @@ -402,7 +402,11 @@ impl<'r> PrepareUpdatesBuffer<'r> { for logentry in logents { let logentry = Arc::new(logentry); let gen = self.gen(); - self.g.gs.log.push((gen, logentry.clone())); + let now = Timestamp::now(); + let when = iter::once(now).chain( + self.g.gs.log.last().map(|l| l.1) + ).max().unwrap(); + self.g.gs.log.push((gen, when, logentry.clone())); self.us.push(PreparedUpdateEntry::Log(logentry)); } } diff --git a/templates/session.tera b/templates/session.tera index 9c43090a..edd152f9 100644 --- a/templates/session.tera +++ b/templates/session.tera @@ -50,7 +50,7 @@

{% for ent in log %} -
{{ ent.1.html | safe }}
+
{{ ent.2.html | safe }}
{%- endfor %}
-- 2.30.2