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(())
}