chiark / gitweb /
token handling fixes
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 21:48:18 +0000 (21:48 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 12 Nov 2020 21:48:18 +0000 (21:48 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/accounts.rs
src/cmdlistener.rs
src/global.rs
src/session.rs

index d7003090ffb9aeead5caf89cea709eacd85b0322..e90c6b43b0c78970c596c45d18101a03f0ac9286 100644 (file)
@@ -2,9 +2,6 @@
 // SPDX-License-Identifier: AGPL-3.0-or-later
 // There is NO WARRANTY.
 
-// xxx load, incl reveleation expiry
-// xxx periodic token reveleation expiry
-
 use crate::imports::*;
 
 use parking_lot::{Mutex, const_mutex, MutexGuard};
@@ -426,12 +423,6 @@ pub fn load_accounts() {
   *ag.0 = Some(accounts);
 }
 
-impl AccountRecord {
-  pub fn expire_tokens_revealed(&mut self) {
-    panic!("xxx")
-  }
-}
-
 //---------- acl handling ----------
 
 pub mod loaded_acl {
index df56424a272fe975c5660b0d80d38c65889f62f2..30a54b6ca6add7dc6bb225a88d7bbd8d186b26cb 100644 (file)
@@ -489,6 +489,16 @@ fn execute_game_insn<'cs, 'igr, 'ig : 'igr>(
       let ag = AccountsGuard::lock();
       let (ig, _) = cs.check_acl(&ag, ig, PCH::Instance, &[TP::Super])?;
       ig.gs.log.clear();
+      for ipr in ig.iplayers.values_mut() {
+        // todo: do this only if there are no hidden pieces?
+        let tr = &mut ipr.ipl.tokens_revealed;
+        let latest = tr.values()
+          .map(|trv| trv.latest)
+          .max();
+        if let Some(latest) = latest {
+          tr.retain(|_k, v| v.latest >= latest);
+        }
+      }
       (U{ pcs: vec![ ],
           log: vec![ LogEntry {
             html: Html(format!("{} cleared the log", &who)),
index 1b09cdc22dd28f532a398703a3b9947d44920417..49b68e595947f32e50ccebaaf17c6c7690504bce 100644 (file)
@@ -653,8 +653,6 @@ impl<'ig> InstanceGuard<'ig> {
         account: (*acct.account).clone(),
         desc,
       };
-      // xxx show tokens revealed when joining game
-      // xxx clear tokens revealed when logs is cleared
       self.iplayers.byid_mut(player)?.ipl.tokens_revealed.entry(revk)
         .or_insert(TokenRevelationValue {
           latest: now,
index 50895941be6aafc66f936f7a14703a0813ded111..b4a4f5c174c9e3e6b4bfca84f345208dfabd5f95 100644 (file)
@@ -143,7 +143,7 @@ fn session(form : Json<SessionForm>) -> Result<Template,OE> {
       load : serde_json::to_string(&DataLoad {
         players : load_players,
       }).map_err(|e| InternalError::JSONEncode(e))?,
-      // xxx show account accesses
+      // xxx show token revelations accesses
     };
     trace!("SessionRenderContext {:?}", &src);
     (src, client)