chiark / gitweb /
signal player removal to that player
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 31 Jul 2020 21:45:45 +0000 (22:45 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 31 Jul 2020 21:45:45 +0000 (22:45 +0100)
src/error.rs
src/global.rs

index a9d243fd43f00dd93a2dac6adfb54c58f0eeffb8..5371f56f73a8463ef7f9746fce50cef9de453a9f 100644 (file)
@@ -45,6 +45,7 @@ pub enum ServerFailure {
 #[derive(Error,Debug,Serialize,Copy,Clone)]
 pub enum ErrorSignaledViaUpdate {
   RenderingError,
+  PlayerRemoved,
 }
 display_as_debug!{ErrorSignaledViaUpdate}
 
index 4a376ce4c123d9f2c14f50cd7e2cd2934a248ff7..63b5515d8fb0deeb627d7e70337b563ba45db418 100644 (file)
@@ -397,8 +397,14 @@ impl InstanceGuard<'_> {
         if remove { clients_to_remove.insert(k); }
         !remove
       });
-      // xxx signal this client to abandon ?
-      self.updates.remove(oldplayer);
+      if let Some(mut updates) = self.updates.remove(oldplayer) {
+        updates. push(PreparedUpdate {
+          gen: self.c.g.gs.gen,
+          us : vec![ PreparedUpdateEntry::Error(
+            ErrorSignaledViaUpdate::PlayerRemoved
+          )],
+        });
+      }
       self.tokens_deregister_for_id(|id:PlayerId| id==oldplayer);
       self.tokens_deregister_for_id(|id| clients_to_remove.contains(&id));
       self.save_access_now().unwrap_or_else(