From d50cbd513c7208cb2a5c13571a964544b9470017 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 4 Jun 2024 21:53:00 +0200 Subject: show chat and winners --- src/game/server.rs | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'src/game/server.rs') diff --git a/src/game/server.rs b/src/game/server.rs index 2cc5d43..65a5cc9 100644 --- a/src/game/server.rs +++ b/src/game/server.rs @@ -37,25 +37,16 @@ async fn game_loop(config: Config, state: Arc) { let res = g.tick(); match res { ControlFlow::Continue(()) => { - let _ = state.tick.send(false); + let _ = state.tick.send(None); speed += config.tickrate_speedup; speed = speed.min(config.tickrate_max) } ControlFlow::Break(winner) => { info!("winner: {winner:?}"); - if let Some(winner) = winner { - if let Some(winner) = state.players.write().await.get(&winner).cloned() { - let mut h = state.win_history.write().await; - h.push_front(winner); - while h.len() > 64 { - h.pop_back(); - } - } - } let p = state.players.read().await; *g = Game::new(p.clone().into_iter().collect()); speed = config.tickrate; - let _ = state.tick.send(true); + let _ = state.tick.send(Some(winner)); } } drop(g); @@ -126,12 +117,12 @@ async fn handle_tick( mut tx: impl AsyncWrite + Unpin, cstate: &mut ClientState, state: &Arc, - new_game: bool, + new_game: Option>, ) -> anyhow::Result<()> { let Some(pid) = cstate.pid else { return Ok(()) }; let mut events = Vec::new(); - if new_game { - if cstate.alive { + if let Some(winner) = new_game { + if winner == cstate.pid { tx.send_packet(Packet::Win(0, 0)).await?; } cstate.alive = true; @@ -141,7 +132,7 @@ async fn handle_tick( } { let g = state.game.read().await; - if new_game { + if new_game.is_some() { events.push(Packet::Game { my_id: pid, width: g.map.size.x as usize, @@ -235,6 +226,11 @@ async fn handle_packet( } } Packet::Chat(message) => { + if message.len() > 128 { + tx.send_packet(Packet::Error("chat message too long (> 128)".to_string())) + .await?; + return Ok(()); + } let _ = state.chat.send(("".to_string(), message)); } _ => { -- cgit v1.2.3-70-g09d2