hul ignennem

This commit is contained in:
2023-06-11 14:36:21 +02:00
parent bfabcc0abc
commit fb1b863746
13 changed files with 189 additions and 43 deletions

View File

@@ -129,7 +129,7 @@ async fn main() {
async fn ws_handler(
ws: WebSocketUpgrade,
user_agent: Option<TypedHeader<headers::UserAgent>>,
Extension(app_state_watch_rx): Extension<tokio::sync::watch::Receiver<AppState>>,
Extension(state_watch_rx): Extension<tokio::sync::watch::Receiver<common::State>>,
) -> impl IntoResponse {
let user_agent = if let Some(TypedHeader(user_agent)) = user_agent {
user_agent.to_string()
@@ -138,15 +138,15 @@ async fn ws_handler(
};
tracing::debug!("{user_agent} connected websocket.");
ws.on_upgrade(move |socket| handle_socket(socket, app_state_watch_rx))
ws.on_upgrade(move |socket| handle_socket(socket, state_watch_rx))
}
/// Websocket statemachine (one will be spawned per connection)
async fn handle_socket(mut socket: WebSocket, app_state_watch_rx: tokio::sync::watch::Receiver<AppState>) {
let mut stream = tokio_stream::wrappers::WatchStream::new(app_state_watch_rx);
loop {
let app_state = stream.next().await;
let serialized = serde_json::to_string(&app_state).expect("Failed to serialize app state to JSON");
async fn handle_socket(mut socket: WebSocket, state_watch_rx: tokio::sync::watch::Receiver<common::State>) {
let mut stream = tokio_stream::wrappers::WatchStream::new(state_watch_rx);
while let Some(state) = stream.next().await {
let state: common::WebSocketMessage = state;
let serialized = serde_json::to_string(&state).expect("Failed to serialize app state to JSON");
if socket.send(Message::Text(serialized)).await.is_err() {
tracing::debug!("Websocket client disconnected");
break;