harddrive-party 0.0.2

Share files peer-to-peer
Documentation
//! Websocket server for sending events to UI
use crate::SharedState;
use axum::extract::ws::{Message, WebSocket};
use bincode::serialize;
use log::{error, warn};

pub async fn handle_socket(shared_state: SharedState, mut socket: WebSocket) {
    let mut event_receiver = shared_state.event_broadcaster.subscribe();

    while let Ok(msg) = event_receiver.recv().await {
        match serialize(&msg) {
            Ok(message_bytes) => {
                if let Err(err) = socket.send(Message::Binary(message_bytes.into())).await {
                    warn!("cannot send ws message {err:?}");
                    break;
                };
            }
            Err(_) => {
                error!("Cannot serialize message {msg:?}")
            }
        }
    }
}