From ba6d71bd9ce3d0d34587dbd5fc3134719bebfa40 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 6 Jul 2020 15:59:20 +0100 Subject: [PATCH] logentry --- src/bin/server.rs | 20 ++++++++++++-------- src/gamestate.rs | 9 ++++++++- src/global.rs | 8 +++----- src/sse.rs | 8 +++----- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 0f21f7dd..3edfcb74 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -134,6 +134,7 @@ fn api_grab(form : Json) -> impl response::Responder<'static> { let g_updates = &mut g.updates; let gs_pieces = &mut g.gs.pieces; let gs_gen = &mut g.gs.gen; + let gs_log = &mut g.gs.log; let r : Result<(),GameError> = (||{ let piece = decode_visible_pieceid(form.piece); let p = gs_pieces.byid_mut(piece)?; @@ -155,6 +156,14 @@ fn api_grab(form : Json) -> impl response::Responder<'static> { id : vpiece, face : p.face, }; + let logentry = Arc::new(LogEntry { + msg : format!("{} grasped {}", + &htmlescape::encode_minimal(&pl.nick), + p.describe_html(&pri)), + // split view: pri should be global + // (currently log is one global view) + }); + gs_log.push((gen,logentry.clone())); let op = PieceUpdateOp::Modify(p.prep_piecestate(&pri)); let update = PreparedUpdate { gen, @@ -165,14 +174,9 @@ fn api_grab(form : Json) -> impl response::Responder<'static> { piece : vpiece, op, }, - PreparedUpdateEntry::Log { - msg : Arc::new(format!("{} grasped {}", - &htmlescape::encode_minimal(&pl.nick), - p.describe_html(&pri) - // split view: pri should be global - // (currently log is one global view) - )), - }, + PreparedUpdateEntry::Log ( + logentry, + ), ], }; let update = Arc::new(update); diff --git a/src/gamestate.rs b/src/gamestate.rs index 5e7704b9..faa3afe8 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -104,6 +104,7 @@ pub struct GameState { pub pieces : DenseSlotMap, pub players : DenseSlotMap, pub gen : Generation, + pub log : Vec<(Generation, Arc)>, } #[derive(Debug)] @@ -111,6 +112,11 @@ pub struct Player { pub nick : String, } +#[derive(Debug,Serialize)] +pub struct LogEntry { + pub msg : String, +} + pub fn xxx_gamestate_init() -> GameState { let mut pieces = DenseSlotMap::with_key(); for (pos, p) in xxx_make_pieces() { @@ -124,5 +130,6 @@ pub fn xxx_gamestate_init() -> GameState { }; pieces.insert(pr); } - GameState { pieces, gen : Generation(1), players : Default::default(), } + GameState { pieces, gen : Generation(1), players : Default::default(), + log : Default::default(), } } diff --git a/src/global.rs b/src/global.rs index a049b968..18895a4e 100644 --- a/src/global.rs +++ b/src/global.rs @@ -31,9 +31,7 @@ pub enum PreparedUpdateEntry { piece : VisiblePieceId, op : PieceUpdateOp, }, - Log { - msg : Arc, - }, + Log (Arc), } impl PreparedUpdateEntry { pub fn json_len(&self) -> usize { @@ -43,8 +41,8 @@ impl PreparedUpdateEntry { 50 + op.new_state().map(|x| x.svg.len()).unwrap_or(0) }, - Log { msg } => { - msg.as_bytes().len() * 3 + Log(logent) => { + logent.msg.as_bytes().len() * 3 } } } diff --git a/src/sse.rs b/src/sse.rs index 936f041a..bf5e45cf 100644 --- a/src/sse.rs +++ b/src/sse.rs @@ -56,9 +56,7 @@ enum TransmitUpdate<'u> { piece : VisiblePieceId, op : &'u PieceUpdateOp, }, - Log { - msg : &'u str, - }, + Log (&'u LogEntry), } #[derive(Error,Debug)] @@ -103,8 +101,8 @@ impl Read for UpdateReader { &PreparedUpdateEntry::Piece { piece, ref op, .. } => { TransmitUpdate::Piece { piece, op } }, - PreparedUpdateEntry::Log { msg } => { - TransmitUpdate::Log { msg } + PreparedUpdateEntry::Log(logent) => { + TransmitUpdate::Log(&*logent) }, }; serde_json::to_writer(&mut buf, &tu)?; -- 2.30.2