fn game_synch(&mut self, game: InstanceName) -> Generation {
let cmd = MgmtCommand::AlterGame {
how: MgmtGameUpdateMode::Online,
- insns: vec![ MgmtGameInstruction::Synch ],
+ insns: vec![ MgmtGameInstruction::SynchLog ],
game
};
let gen = if_chain!{
alice.api_piece(GH::Raw, &mut a_p, alice_move_to)?;
bob.synchx(Some(&mut b_pieces), None, |_sess, gen, k, v| {
dbg!(gen, k, v);
+
+ if_chain! {
+ if k == "Log";
+ if let Some(html) = (|| Some({
+ v
+ .as_object()?
+ .get("logent")?
+ .as_object()?
+ .get("html")?
+ .as_str()?
+ }))();
+ if html.starts_with(SYNCH_LOGENTRY_PREFIX.as_html_str());
+ then { return; }
+ }
+
panic!("bob saw something when alice moved displaced occulted");
})?;
no_updates(ig, mgr)
}
+ MGI::SynchLog => {
+ let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?;
+ let ig = ig.by_mut(superuser.into());
+ let (gen, mgr) = some_synch_core(ig)?;
+ let log = LogEntry { html: synch_logentry(gen) };
+ (U{ pcs: vec![], log: vec![log], raw: None }, mgr, None, ig)
+ },
+
MGI::PieceIdLookupFwd { player, piece } => {
pieceid_lookup(
cs, ig, player,
SetTableColour(ColourSpec),
/// For testing, mostly.
- Synch,
+ Synch, SynchLog,
/// For testing only
PieceIdLookupFwd { piece: PieceId, player: PlayerId, },
/// For testing only
let f: FormattedLogEntry = (tz, logent).into();
f.serialize(s)
}
+
+pub const SYNCH_LOGENTRY_PREFIX: HtmlLit = Html::lit("### SynchLog ");
+
+pub fn synch_logentry(gen: Generation) -> Html {
+ hformat!("{} gen={} ###", SYNCH_LOGENTRY_PREFIX, gen.0)
+}
}
#[throws(AE)]
- fn synch_raw(&mut self) {
+ fn synch_raw(&mut self) -> String {
let gen = self.su.mgmt_conn().game_synch(self.w.instance.clone())?;
(|| {
loop {
Ok::<(),AE>(())
})()
.context("await gen update via async js script")?;
+ synch_logentry(gen).into_html_string()
}
#[throws(AE)]