From 9384723179d2bf48a6bf56e907ae751e5d7c5c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Mon, 16 Sep 2024 17:31:07 +0400 Subject: [PATCH] refactor(client): split read and write half MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau --- crates/ironrdp-client/src/rdp.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/ironrdp-client/src/rdp.rs b/crates/ironrdp-client/src/rdp.rs index 44b26104..021ada4d 100644 --- a/crates/ironrdp-client/src/rdp.rs +++ b/crates/ironrdp-client/src/rdp.rs @@ -10,7 +10,7 @@ use ironrdp::session::{fast_path, ActiveStage, ActiveStageOutput, GracefulDiscon use ironrdp::{cliprdr, connector, rdpdr, rdpsnd, session}; use ironrdp_core::WriteBuf; use ironrdp_rdpsnd_native::cpal; -use ironrdp_tokio::single_sequence_step_read; +use ironrdp_tokio::{single_sequence_step_read, split_tokio_framed}; use rdpdr::NoopRdpdrBackend; use smallvec::SmallVec; use tokio::net::TcpStream; @@ -164,11 +164,12 @@ async fn connect( } async fn active_session( - mut framed: UpgradedFramed, + framed: UpgradedFramed, connection_result: ConnectionResult, event_loop_proxy: &EventLoopProxy, input_event_receiver: &mut mpsc::UnboundedReceiver, ) -> SessionResult { + let (mut reader, mut writer) = split_tokio_framed(framed); let mut image = DecodedImage::new( PixelFormat::RgbA32, connection_result.desktop_size.width, @@ -179,7 +180,7 @@ async fn active_session( let disconnect_reason = 'outer: loop { let outputs = tokio::select! { - frame = framed.read_pdu() => { + frame = reader.read_pdu() => { let (action, payload) = frame.map_err(|e| session::custom_err!("read frame", e))?; trace!(?action, frame_length = payload.len(), "Frame received"); @@ -246,7 +247,7 @@ async fn active_session( for out in outputs { match out { - ActiveStageOutput::ResponseFrame(frame) => framed + ActiveStageOutput::ResponseFrame(frame) => writer .write_all(&frame) .await .map_err(|e| session::custom_err!("write response", e))?, @@ -295,12 +296,12 @@ async fn active_session( let mut buf = WriteBuf::new(); 'activation_seq: loop { let written = - single_sequence_step_read(&mut framed, &mut *connection_activation, &mut buf, None) + single_sequence_step_read(&mut reader, &mut *connection_activation, &mut buf, None) .await .map_err(|e| session::custom_err!("read deactivation-reactivation sequence step", e))?; if written.size().is_some() { - framed.write_all(buf.filled()).await.map_err(|e| { + writer.write_all(buf.filled()).await.map_err(|e| { session::custom_err!("write deactivation-reactivation sequence step", e) })?; }