From 1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 4 Jun 2024 23:43:37 +0200 Subject: make chat work --- config.toml | 4 ++-- src/spectate/server.rs | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/config.toml b/config.toml index e9a72af..2c1f9ed 100644 --- a/config.toml +++ b/config.toml @@ -5,10 +5,10 @@ bind = "127.0.0.1:8000" bind = "0.0.0.0:4000" tickrate = 1 tickrate_speedup = 0.1 -tickrate_max = 3 +tickrate_max = 5 [bot] -amount = 10 +amount = 2 [database] path = "/tmp/trondb" diff --git a/src/spectate/server.rs b/src/spectate/server.rs index ec6fbe5..0c2af1d 100644 --- a/src/spectate/server.rs +++ b/src/spectate/server.rs @@ -38,7 +38,8 @@ pub async fn spectate_server(config: Config, state: Arc) -> Result<()> { win_history: Default::default(), events: broadcast::channel(512).0, }); - spawn(broadcaster(sstate.clone(), state)); + spawn(game_broadcaster(sstate.clone(), state.clone())); + spawn(chat_broadcaster(sstate.clone(), state.clone())); let app = Router::new() .route("/", get(index)) .route("/main.js", get(javascript)) @@ -131,11 +132,19 @@ async fn stats( Json(scoreboard) } -async fn broadcaster(sstate: Arc, state: Arc) { +async fn chat_broadcaster(sstate: Arc, state: Arc) { + let mut messages = state.chat.subscribe(); + while let Ok((author, message)) = messages.recv().await { + let p = Packet::Chat(format!("{author}: {message}")); + sstate.past_events.write().await.push(p.clone()); + let _ = sstate.events.send(p); + } +} + +async fn game_broadcaster(sstate: Arc, state: Arc) { let mut ticks = state.tick.subscribe(); while let Ok(new_game) = ticks.recv().await { let mut events = Vec::new(); - { let g = state.game.read().await; events.push(Packet::Tick); -- cgit v1.2.3-70-g09d2