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 | |
parent | 8af2bd377308d877f068e917554c9d8a7c5b2dc1 (diff) | |
download | gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar.bz2 gpn-tron-rust-1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c.tar.zst |
make chat work
-rw-r--r-- | config.toml | 4 | ||||
-rw-r--r-- | 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<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); |