spacegate_kernel/backend_service/
ws_client_service.rs

1use hyper::upgrade::Upgraded;
2use hyper_util::rt::TokioIo;
3use tokio::{self};
4
5use crate::BoxError;
6
7/// transfer data between 2 tcp upgraded services
8pub(super) async fn tcp_transfer(as_server: Upgraded, as_client: Upgraded) -> Result<(), BoxError> {
9    let mut server_conn = TokioIo::new(as_server);
10    let mut client_conn = TokioIo::new(as_client);
11    tokio::task::spawn(async move {
12        let result = tokio::io::copy_bidirectional(&mut server_conn, &mut client_conn).await;
13        match result {
14            Ok((server_to_client, client_to_server)) => {
15                tracing::debug!("[SG.Upgraded] connection closed, server to client bytes: {server_to_client}, client to server bytes: {client_to_server}");
16            }
17            Err(error) => {
18                tracing::warn!("[SG.Upgraded] connection close error: {error}");
19            }
20        }
21    });
22    Ok(())
23}