mudroom 0.1.2

A TUI client and server for multiplayer text adventure games.
Documentation
use eventsource_stream::Eventsource;
use futures_util::StreamExt;
use tokio::sync::mpsc;

use crate::network::event::NetworkEvent;

pub async fn connect_sse(
    url: String,
    client_id: String,
    tx: mpsc::Sender<NetworkEvent>,
) -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::new();
    let response = client
        .get(format!("{url}/events?client_id={client_id}"))
        .send()
        .await?;
    let mut stream = response.bytes_stream().eventsource();

    while let Some(event) = stream.next().await {
        match event {
            Ok(ev) => {
                if let Ok(network_event) = serde_json::from_str::<NetworkEvent>(&ev.data)
                    && tx.send(network_event).await.is_err()
                {
                    break;
                }
            }
            Err(_) => break,
        }
    }

    Ok(())
}