From: Ian Jackson Date: Sun, 23 Aug 2020 17:15:30 +0000 (+0100) Subject: wip player fix X-Git-Tag: otter-0.2.0~1072 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=88793248b958faa70013bedb1267f622d1f91747;p=otter.git wip player fix --- diff --git a/src/bin/otter.rs b/src/bin/otter.rs index c2c2dcb2..45a91697 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -10,6 +10,8 @@ use std::cell::RefCell; use std::cell::Cell; type E = anyhow::Error; +type Insn = MgmtGameInstruction; +type Resp = MgmtGameResponse; use argparse::action::ParseResult::Parsed; @@ -293,9 +295,19 @@ fn setup_table(chan: &mut ConnForGame, spec: &TableSpec) -> Result<(),AE> { let (added_players,) = { let (_, nick2id) = chan.get_info()?; + #[derive(Default)] + struct St { id: PlayerId, old: bool, new: bool }; + + let mut nick2st : HashMap<_,_> = {nick2id} + .drain() + .map(|(nick,id)| (nick, St { id, old: true, new: false })) + .collect(); + let mut insns = vec![]; for pspec in &spec.players { - if !nick2id.contains_key(&pspec.nick) { + let st = nick2st.entry(pspec.nick.clone()).or_default(); + st.new = true; + if !st.old { insns.push(MgmtGameInstruction::AddPlayer(PlayerState { nick: pspec.nick.clone() })); @@ -304,7 +316,7 @@ fn setup_table(chan: &mut ConnForGame, spec: &TableSpec) -> Result<(),AE> { let mut added_players = HashSet::new(); chan.alter_game(insns, Some(&mut |response| { let player = match response { - &MgmtGameResponse::AddPlayer(player) => player, + &Resp::AddPlayer(player) => player, _ => Err(anyhow!("AddPlayer strange answer {:?}", &response))?, }; @@ -430,8 +442,6 @@ mod create_table { //---------- reset-game ---------- -type Insn = MgmtGameInstruction; - mod reset_game { use super::*;