From 4be2bed7ac0e8156749d0105c2188b0dd2b18351 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 14 Oct 2020 21:55:05 +0100 Subject: [PATCH] timestamps in the log Signed-off-by: Ian Jackson --- src/gamestate.rs | 8 +++++++- src/session.rs | 4 ++-- src/updates.rs | 20 ++++++++++---------- templates/script.ts | 5 +++-- templates/session.tera | 2 +- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index bebb4b16..340aac71 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -45,7 +45,7 @@ pub struct GameState { pub pieces : Pieces, pub players : PlayerMap, pub gen : Generation, - pub log : Vec<(Generation, Timestamp, Arc)>, // xxx expiry + pub log : Vec<(Generation, Arc)>, // xxx expiry pub max_z : ZCoord, } @@ -73,6 +73,12 @@ pub struct LogEntry { pub html : Html, } +#[derive(Debug,Serialize,Deserialize)] +pub struct CommittedLogEntry { + pub when: Timestamp, + pub logent: LogEntry, +} + // ---------- piece trait, and rendering ---------- type IE = InternalError; diff --git a/src/session.rs b/src/session.rs index f9b959ec..4b2e5260 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, Timestamp, Arc)>, + log : Vec>, } #[derive(Serialize,Debug)] @@ -122,7 +122,7 @@ fn session(form : Json) -> Result { let src = SessionRenderContext { ctoken, gen : ig.gs.gen, - log : ig.gs.log.clone(), + log : ig.gs.log.iter().map(|(_,logent)| logent.clone()).collect(), table_size : ig.gs.table_size, player, defs : alldefs, diff --git a/src/updates.rs b/src/updates.rs index 1984d333..11df724f 100644 --- a/src/updates.rs +++ b/src/updates.rs @@ -47,7 +47,7 @@ pub enum PreparedUpdateEntry { op : PieceUpdateOp, }, SetTableSize(Pos), - Log (Arc), + Log (Arc), Error (Option /* none: all */, ErrorSignaledViaUpdate), } @@ -103,7 +103,7 @@ enum TransmitUpdateEntry<'u> { ns: &'u PreparedPieceState, }, SetTableSize(Pos), - Log (&'u LogEntry), + Log (&'u CommittedLogEntry), Error(&'u ErrorSignaledViaUpdate), } @@ -175,7 +175,7 @@ impl PreparedUpdateEntry { op.new_state().map(|x| x.svg.0.as_bytes().len()).unwrap_or(0) }, Log(logent) => { - logent.html.0.as_bytes().len() * 3 + logent.logent.html.0.as_bytes().len() * 28 }, SetTableSize(_) | Error(_,_) => { @@ -399,15 +399,15 @@ impl<'r> PrepareUpdatesBuffer<'r> { } pub fn log_updates(&mut self, logents: Vec) { - for logentry in logents { - let logentry = Arc::new(logentry); - let gen = self.gen(); - let now = Timestamp::now(); + let now = Timestamp::now(); + for logent in logents { let when = iter::once(now).chain( - self.g.gs.log.last().map(|l| l.1) + self.g.gs.log.last().map(|l| l.1.when) ).max().unwrap(); - self.g.gs.log.push((gen, when, logentry.clone())); - self.us.push(PreparedUpdateEntry::Log(logentry)); + let logent = Arc::new(CommittedLogEntry { when, logent }); + let gen = self.gen(); + self.g.gs.log.push((gen, logent.clone())); + self.us.push(PreparedUpdateEntry::Log(logent)); } } diff --git a/templates/script.ts b/templates/script.ts index fd219ab0..9f38f0a4 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -44,6 +44,7 @@ type ClientSeq = number; type Generation = number; type UoKind = 'Client' | "Global"| "Piece" | "ClientExtra" | "GlobalExtra"; type WhatResponseToClientOp = "Predictable" | "Unpredictable" | "UpdateSvg"; +type Timestamp = number; // unix time_t, will break in 285My type UoDescription = { kind: UoKind; @@ -777,8 +778,8 @@ function drag_cancel() { // ----- logs ----- messages.Log = function -(j: { html: string }) { - add_log_message(j.html); +(j: { when: Timestamp, logent: { html: string } }) { + add_log_message(j.when + '|' + j.logent.html); } function add_log_message(msg_html: string) { diff --git a/templates/session.tera b/templates/session.tera index edd152f9..e2d1555e 100644 --- a/templates/session.tera +++ b/templates/session.tera @@ -50,7 +50,7 @@

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