From: Ian Jackson Date: Thu, 14 Jan 2021 01:13:28 +0000 (+0000) Subject: Provide account in PlayerRecord X-Git-Tag: otter-0.3.0~8 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7b7b5c609c707d8c80db05d2cb47aa2059784ee1;p=otter.git Provide account in PlayerRecord This is an Arc<>. It saves us a good deal of lock hierarchy trouble. Signed-off-by: Ian Jackson --- diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index c9f22d89..8af23885 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -362,7 +362,8 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( tz, tokens_revealed: default(), }; - let (player, update, logentry) = ig.player_new(gpl, ipl, logentry)?; + let (player, update, logentry) = + ig.player_new(gpl, ipl, arecord.account.clone(), logentry)?; let atr = ig.player_access_reset(ag, player, auth.therefore_ok())?; diff --git a/src/global.rs b/src/global.rs index a50d2b8a..4c6a0c6e 100644 --- a/src/global.rs +++ b/src/global.rs @@ -57,6 +57,7 @@ pub struct Instance { pub struct PlayerRecord { pub u: PlayerUpdates, pub ipl: IPlayerState, + pub account: Arc, } #[derive(Debug,Clone,Serialize,Deserialize)] @@ -534,7 +535,7 @@ impl<'ig> InstanceGuard<'ig> { /// proves the caller has a log entry. #[throws(MgmtError)] pub fn player_new(&mut self, gnew: GPlayerState, inew: IPlayerState, - logentry: LogEntry) + account: Arc, logentry: LogEntry) -> (PlayerId, PreparedUpdateEntry, LogEntry) { // saving is fallible, but we can't attempt to save unless // we have a thing to serialise with the player in it @@ -544,7 +545,7 @@ impl<'ig> InstanceGuard<'ig> { } let player = self.c.g.gs.players.insert(gnew); let u = PlayerUpdates::new_begin(&self.c.g.gs).new(); - let record = PlayerRecord { u, ipl: inew }; + let record = PlayerRecord { u, account, ipl: inew, }; self.c.g.iplayers.insert(player, record); @@ -1057,9 +1058,10 @@ impl InstanceGuard<'_> { let iplayers : SecondarySlotMap = { let a = aplayers; a.into_iter() - }.map(|(player, ipl)| { + }.filter_map(|(player, ipl)| { let u = pu_bc.new(); - (player, PlayerRecord { u, ipl }) + let account = accounts.lookup(ipl.acctid).ok()?.0.account.clone(); + Some((player, PlayerRecord { u, ipl, account })) }).collect(); for mut p in gs.pieces.values_mut() {