chiark / gitweb /
log on reload
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Jul 2020 21:46:56 +0000 (22:46 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Jul 2020 21:46:56 +0000 (22:46 +0100)
src/api.rs
src/gamestate.rs
src/session.rs
src/updates.rs
templates/session.tera

index 282f33e47176cbfbd06a4d3871c1fc386fbd2f2d..cd4c5246adaa4e34846be9d9a24a64ad28206f0c 100644 (file)
@@ -114,7 +114,7 @@ fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
       });
 
       for logentry in logents {
-        let logentry = Arc::new(logentry);
+        let logentry = LogEntryRef(Arc::new(logentry));
         gs.log.push((gen, logentry.clone()));
         us.push(PreparedUpdateEntry::Log(logentry));
       }
index b6ea93791ff41875d6f49714ba97fa03b87e91d6..0b18a6ba1a03f99ac34e423e877e994b86bbd65e 100644 (file)
@@ -37,7 +37,7 @@ pub struct GameState {
   pub pieces : DenseSlotMap<PieceId,PieceState>,
   pub players : DenseSlotMap<PlayerId,PlayerState>,
   pub gen : Generation,
-  pub log : Vec<(Generation, Arc<LogEntry>)>,
+  pub log : Vec<(Generation,LogEntryRef)>,
 }
 
 #[derive(Debug)]
@@ -57,6 +57,9 @@ pub struct PlayerState {
   pub nick : String,
 }
 
+#[derive(Debug,Clone)]
+pub struct LogEntryRef(pub Arc<LogEntry>);
+
 #[derive(Debug,Serialize)]
 pub struct LogEntry {
   pub html : String,
@@ -132,6 +135,12 @@ impl Display for ZCoord {
 
 // ---------- game state - rendering etc. ----------
 
+impl Serialize for LogEntryRef {
+  fn serialize<S>(&self, s: S) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error> where S: Serializer {
+    self.0.serialize(s)
+  }
+}
+
 impl PieceState {
   #[throws(SE)]
   pub fn make_defs(&self, pri : &PieceRenderInstructions) -> String {
index 8c3a329ed96769fecd2280ee9773b9949c8ba335..147ee232b481641d620e538da184c56cff270384 100644 (file)
@@ -11,6 +11,7 @@ struct SessionRenderContext {
   defs : Vec<(VisiblePieceId,String)>,
   nick : String,
   load : String,
+  log : Vec<(Generation, LogEntryRef)>,
 }
 
 #[derive(Serialize,Debug)]
@@ -111,6 +112,7 @@ fn session(form : Json<SessionForm>) -> Result<Template,OE> {
     let src = SessionRenderContext {
       ctoken : ctoken.0,
       gen : ig.gs.gen,
+      log : ig.gs.log.clone(),
       player,
       defs : alldefs,
       uses,
index 4ae1dc99db47b2aea53e34802562564220c13d32..c5678d8a09e689da0c69fd8acb07da4d616e5b9b 100644 (file)
@@ -32,7 +32,7 @@ pub enum PreparedUpdateEntry {
     piece : VisiblePieceId,
     op : PieceUpdateOp<PreparedPieceState>,
   },
-  Log (Arc<LogEntry>),
+  Log (LogEntryRef),
 }
 
 #[derive(Debug,Serialize)]
@@ -103,7 +103,7 @@ impl PreparedUpdateEntry {
         op.new_state().map(|x| x.svg.len()).unwrap_or(0)
       },
       Log(logent) => {
-        logent.html.as_bytes().len() * 3
+        logent.0.html.as_bytes().len() * 3
       }
     }
   }
@@ -169,7 +169,7 @@ impl PreparedUpdate {
           TransmitUpdateEntry::Piece { piece, op }
         },
         PreparedUpdateEntry::Log(logent) => {
-          TransmitUpdateEntry::Log(&*logent)
+          TransmitUpdateEntry::Log(&logent.0)
         },
       };
       ents.push(ue);
index 3775f02bd55780ac1fcc3d7ee9e7feaf12eb6b76..69eba9f37457af3a2602267dff918e3a5aa756d8 100644 (file)
     </svg>
 
   <div id="log" style="overflow-y: scroll; height: 200px;">
-    <div id="log1">Log item 1</div>
-    <div id="log2">Log item 2</div>
-    Log item 3
-    <br>
-    Log item 4
-    <br>
-    Log item 5
-    <br>
-    Log item 6
-    <br>
-    Log item 7
-    <br>
-    Log item 8
-    <br>
-    Log item 9
-    <br>
-    Log item 10
-    <br>
-    Log item 11
-    <div id="log12">Log item 12</div>
+{% for ent in log %}
+    <div>{{ ent.1.html | safe }}</div>
+{%- endfor %}
+  </div>
 
 </body>