diff --git a/src/server.rs b/src/server.rs index a1802fe..8a25e34 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,7 +1,7 @@ use std::sync::Arc; -use futures::SinkExt; +use futures::{SinkExt, StreamExt}; use serde_json::json; use tera::{Context, Tera}; use tokio::sync::watch; @@ -53,12 +53,14 @@ struct WithTemplate { context: Context, } -async fn watch_state(mut ws: WebSocket, mut state_channel: watch::Receiver) { - loop { +async fn watch_state(ws: WebSocket, mut state_channel: watch::Receiver) { + let (mut tx, mut rx) = ws.split(); + + while let Some(_) = rx.next().await { let state = state_channel.recv().await; let result = match state { - Some(state) => ws.send(Message::text(json!(state).to_string())).await, + Some(state) => tx.send(Message::text(json!(state).to_string())).await, None => break }; diff --git a/templates/stuff.tera b/templates/stuff.tera index 081ac3a..3b9cfd4 100644 --- a/templates/stuff.tera +++ b/templates/stuff.tera @@ -19,6 +19,7 @@ ws.onopen = function() { console.log("Connected"); + ws.send("MOAR"); } ws.onmessage = function(e) { @@ -33,6 +34,7 @@ li.innerText = `${ob.name} @ ${ob.x}, ${ob.y}`; ul.append(li); } + ws.send("MOAR"); };