aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-24 00:24:24 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-24 00:24:26 +0200
commit1e5dc0dee2fed17d6cc5c0e98edbb9b72daa6345 (patch)
tree2309491b2f205f7bacac42c0760fc12b3092676f /server/src/server.rs
parentd53a9660c38e2d7a7b896675f4295b48b902506a (diff)
downloadhurrycurry-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.rs13
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(),