diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-04 23:43:37 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-04 23:43:37 +0200 |
commit | 1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c (patch) | |
tree | 6b8933f7aa027248bc3df1e2698c92b9425f41d4 /src/spectate/server.rs | |
parent | 8af2bd377308d877f068e917554c9d8a7c5b2dc1 (diff) | |
download | gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar.bz2 gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar.zst |
make chat work
Diffstat (limited to 'src/spectate/server.rs')
-rw-r--r-- | src/spectate/server.rs | 15 |
1 files changed, 12 insertions, 3 deletions
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<State>) -> 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<SpectateState>, state: Arc<State>) { +async fn chat_broadcaster(sstate: Arc<SpectateState>, state: Arc<State>) { + 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<SpectateState>, state: Arc<State>) { 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); |