From 1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 4 Jun 2024 23:43:37 +0200 Subject: make chat work --- src/spectate/server.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src') 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