aboutsummaryrefslogtreecommitdiff
path: root/src/spectate/server.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-04 23:43:37 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-04 23:43:37 +0200
commit1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c (patch)
tree6b8933f7aa027248bc3df1e2698c92b9425f41d4 /src/spectate/server.rs
parent8af2bd377308d877f068e917554c9d8a7c5b2dc1 (diff)
downloadgpn-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.rs15
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);