let client = iad.ident;
let mut g = iad.gref.lock()?;
let g = &mut *g;
- let cl = &g.clients.byid(client)?;
+ let cl = &mut g.clients.byid_mut(client)?;
// ^ can only fail if we raced
+ cl.lastseen = Instant::now();
let player = cl.player;
let gs = &mut g.gs;
let _ = gs.players.byid(player)?;
#[derive(Debug)]
pub struct Client {
pub player : PlayerId,
+ pub lastseen : Instant,
}
pub type PlayerMap = DenseSlotMap<PlayerId,PlayerState>;
pub use std::fs::File;
pub use std::mem;
pub use std::os::unix;
+pub use std::time::Instant;
pub use thiserror::Error;
pub use anyhow::{Context,anyhow};
let player = iad.ident;
let c = {
let mut ig = iad.gref.lock()?;
- let cl = Client { player };
+ let cl = Client { player, lastseen: Instant::now() };
let client = ig.clients.insert(cl);
let ciad = InstanceAccessDetails {
|s| io::Error::new(io::ErrorKind::Other, anyhow!(s));
let mut ig = self.gref.lock().map_err(|_| em("poison"))?;
+ if (||{
+ (*ig).gs.players.get(self.player)?;
+ let client = ig.clients.get_mut(self.client)?;
+ client.lastseen = Instant::now();
+ Some(())
+ })() == None { return Ok(0) }
+
let orig_wanted = orig_buf.len();
let mut buf = orig_buf.as_mut();