iris update

This commit is contained in:
2025-11-17 21:11:52 -05:00
parent 34faa94a36
commit 46a1b2279e
5 changed files with 31 additions and 9 deletions

2
iris

Submodule iris updated: 955e6b7588...c7b255be4f

View File

@@ -121,7 +121,7 @@ async fn connect_the(handle: AppHandle, info: ConnectInfo) -> NetResult<()> {
}); });
let recv = ServerRecv { handle }; let recv = ServerRecv { handle };
tokio::spawn(recv_uni(conn_, recv)); tokio::spawn(recv_uni(conn_, recv.into()));
while let Some(msg) = ui_recv.recv().await { while let Some(msg) = ui_recv.recv().await {
if send_uni(&conn, msg).await.is_err() { if send_uni(&conn, msg).await.is_err() {

View File

@@ -93,7 +93,7 @@ async fn handle_connection(
accepter: Arc<impl ConAccepter>, accepter: Arc<impl ConAccepter>,
) -> std::io::Result<()> { ) -> std::io::Result<()> {
let conn = conn.await?; let conn = conn.await?;
let handler = accepter.accept(ClientSender { conn: conn.clone() }).await; let handler = Arc::new(accepter.accept(ClientSender { conn: conn.clone() }).await);
let span = tracing::info_span!( let span = tracing::info_span!(
"connection", "connection",
remote = %conn.remote_address(), remote = %conn.remote_address(),
@@ -105,7 +105,8 @@ async fn handle_connection(
.map_or_else(|| "<none>".into(), |x| String::from_utf8_lossy(&x).into_owned()) .map_or_else(|| "<none>".into(), |x| String::from_utf8_lossy(&x).into_owned())
); );
async { async {
recv_uni(conn, handler).await; let res = recv_uni(conn, handler.clone()).await;
handler.disconnect(res).await;
} }
.instrument(span) .instrument(span)
.await; .await;

View File

@@ -7,6 +7,9 @@ use tracing::Instrument as _;
pub trait RecvHandler<M>: Send + Sync + 'static { pub trait RecvHandler<M>: Send + Sync + 'static {
fn msg(&self, msg: M) -> impl Future<Output = ()> + Send; fn msg(&self, msg: M) -> impl Future<Output = ()> + Send;
fn disconnect(&self, reason: DisconnectReason) -> impl Future<Output = ()> + Send {
async { drop(reason) }
}
} }
pub type SendResult = Result<(), ()>; pub type SendResult = Result<(), ()>;
@@ -21,16 +24,27 @@ pub async fn send_uni<M: bincode::Encode>(conn: &Connection, msg: M) -> SendResu
Ok(()) Ok(())
} }
pub async fn recv_uni<M: bincode::Decode<()>>(conn: Connection, handler: impl RecvHandler<M>) { pub enum DisconnectReason {
let handler = Arc::new(handler); Closed,
Timeout,
Other(String),
}
pub async fn recv_uni<M: bincode::Decode<()>>(
conn: Connection,
handler: Arc<impl RecvHandler<M>>,
) -> DisconnectReason {
loop { loop {
let mut recv = match conn.accept_uni().await { let mut recv = match conn.accept_uni().await {
Err(quinn::ConnectionError::ApplicationClosed { .. }) => { Err(quinn::ConnectionError::ApplicationClosed { .. }) => {
return; return DisconnectReason::Closed;
}
Err(quinn::ConnectionError::TimedOut) => {
return DisconnectReason::Timeout;
} }
Err(e) => { Err(e) => {
eprintln!("connection error: {e}"); eprintln!("connection error: {e}");
return; return DisconnectReason::Other(e.to_string());
} }
Ok(s) => s, Ok(s) => s,
}; };

View File

@@ -2,7 +2,7 @@ use crate::{
net::{ net::{
ClientMsg, Msg, ServerMsg, ClientMsg, Msg, ServerMsg,
server::{ClientSender, ConAccepter, listen}, server::{ClientSender, ConAccepter, listen},
transfer::RecvHandler, transfer::{DisconnectReason, RecvHandler},
}, },
rsc::DataDir, rsc::DataDir,
}; };
@@ -82,4 +82,11 @@ impl RecvHandler<ClientMsg> for ClientHandler {
} }
} }
} }
async fn disconnect(&self, reason: DisconnectReason) -> () {
match reason {
DisconnectReason::Closed | DisconnectReason::Timeout => (),
DisconnectReason::Other(e) => println!("connection issue: {e}"),
}
}
} }