chiark / gitweb /
wip player access
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 31 Jul 2020 22:38:35 +0000 (23:38 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 31 Jul 2020 22:38:35 +0000 (23:38 +0100)
src/global.rs

index d068d0e6c3c5b8e1941a453420fb80a1d2ef90bf..d5c5e7dd59ec83721e129c52419ab9f50bc35e37 100644 (file)
@@ -429,22 +429,27 @@ impl InstanceGuard<'_> {
   }
 
   #[throws(OE)]
-  pub fn player_access_reset(&mut self, player: PlayerId) -> RawToken {
+  pub fn player_access_reset(&mut self, players: &[PlayerId])
+                             -> Vec<RawToken> {
     // tokens can't persist unless game is never destroyed ?
     // so a game is like a tables, and persistent
     // xxx boxes feature maybe
-    self.tokens_deregister_for_id(|id:PlayerId| id==player);
+    self.tokens_deregister_for_id(|id:PlayerId| players.contains(&id));
     self.save_access_now()?;
-    let iad = InstanceAccessDetails {
-      gref : self.gref.clone(),
-      ident : player
-    };
-    let token = RawToken::new_random()?;
-    self.token_register(token.clone(), iad);
+    let mut tokens = vec![];
+    for &player in players {
+      let iad = InstanceAccessDetails {
+        gref : self.gref.clone(),
+        ident : player
+      };
+      let token = RawToken::new_random()?;
+      self.token_register(token.clone(), iad);
+      tokens.push(token);
+    }
     self.save_access_now()?;
     // If the save fails, we don't return the token so no-one can use
     // it.  Therefore we don't need to bother deleting it.
-    token
+    tokens
   }
 
   fn token_register<Id:AccessId>(