diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-10-24 00:24:24 +0200 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-10-24 00:24:26 +0200 |
| commit | 1e5dc0dee2fed17d6cc5c0e98edbb9b72daa6345 (patch) | |
| tree | 2309491b2f205f7bacac42c0760fc12b3092676f /server/src/server.rs | |
| parent | d53a9660c38e2d7a7b896675f4295b48b902506a (diff) | |
| download | hurrycurry-1e5dc0dee2fed17d6cc5c0e98edbb9b72daa6345.tar hurrycurry-1e5dc0dee2fed17d6cc5c0e98edbb9b72daa6345.tar.bz2 hurrycurry-1e5dc0dee2fed17d6cc5c0e98edbb9b72daa6345.tar.zst | |
Kick player with no inputs in last 60s; refactor server io
Diffstat (limited to 'server/src/server.rs')
| -rw-r--r-- | server/src/server.rs | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index dc63f1b5..267b3062 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -42,13 +42,15 @@ use std::{ sync::Arc, time::{Duration, Instant}, }; -use tokio::sync::broadcast::Sender; +use tokio::sync::{broadcast, mpsc}; -#[derive(Debug, Default)] +#[derive(Debug)] pub struct ConnectionData { pub players: HashSet<PlayerID>, pub idle: bool, pub ready: bool, + pub last_player_input: f32, + pub replies: mpsc::Sender<PacketC>, } pub enum AnnounceState { @@ -59,7 +61,7 @@ pub enum AnnounceState { pub struct Server { pub tick_perf: (Duration, usize), - pub tx: Sender<PacketC>, + pub broadcast: broadcast::Sender<PacketC>, pub connections: HashMap<ConnectionID, ConnectionData>, pub paused: bool, pub announce_state: AnnounceState, @@ -130,7 +132,6 @@ impl GameServerExt for Game { timer: Option<Duration>, packet_out: &mut VecDeque<PacketC>, ) { - // TODO cleanup let players = self .players .iter() @@ -312,12 +313,12 @@ impl GameServerExt for Game { } impl Server { - pub fn new(data_path: PathBuf, tx: Sender<PacketC>) -> Result<Self> { + pub fn new(data_path: PathBuf, tx: broadcast::Sender<PacketC>) -> Result<Self> { Ok(Self { game: Game::default(), tick_perf: (Duration::ZERO, 0), index: DataIndex::new(data_path).context("Failed to load data index")?, - tx, + broadcast: tx, announce_state: AnnounceState::Done, packet_out: VecDeque::new(), connections: HashMap::new(), |