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)?;
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,
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);
pub pieces : DenseSlotMap<PieceId,PieceRecord>,
pub players : DenseSlotMap<PlayerId,Player>,
pub gen : Generation,
+ pub log : Vec<(Generation, Arc<LogEntry>)>,
}
#[derive(Debug)]
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() {
};
pieces.insert(pr);
}
- GameState { pieces, gen : Generation(1), players : Default::default(), }
+ GameState { pieces, gen : Generation(1), players : Default::default(),
+ log : Default::default(), }
}
piece : VisiblePieceId,
op : PieceUpdateOp<PreparedPieceState>,
},
- Log {
- msg : Arc<String>,
- },
+ Log (Arc<LogEntry>),
}
impl PreparedUpdateEntry {
pub fn json_len(&self) -> usize {
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
}
}
}
piece : VisiblePieceId,
op : &'u PieceUpdateOp<PreparedPieceState>,
},
- Log {
- msg : &'u str,
- },
+ Log (&'u LogEntry),
}
#[derive(Error,Debug)]
&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)?;