use std::net::SocketAddr;
use std::sync::Arc;
use tokio::io::{AsyncRead, AsyncWrite};
use tokio_tungstenite::WebSocketStream;
use crate::error::BoltError;
use crate::server::auth::AuthValidator;
use crate::server::backend::BoltBackend;
use crate::server::builder::run_handshake_and_connection;
use crate::server::session_manager::SessionManager;
use crate::ws::WsStream;
pub fn accept_ws<S, B>(
ws_stream: WebSocketStream<S>,
peer_addr: SocketAddr,
backend: Arc<B>,
session_manager: Arc<SessionManager>,
auth_validator: Option<Arc<dyn AuthValidator>>,
max_message_size: Option<usize>,
) where
S: AsyncRead + AsyncWrite + Unpin + Send + 'static,
B: BoltBackend,
{
let adapted = WsStream::new(ws_stream);
tokio::spawn(async move {
run_handshake_and_connection(
adapted,
peer_addr,
backend,
session_manager,
auth_validator,
max_message_size,
)
.await;
});
}
pub async fn handle_ws<S, B>(
ws_stream: WebSocketStream<S>,
peer_addr: SocketAddr,
backend: Arc<B>,
session_manager: Arc<SessionManager>,
auth_validator: Option<Arc<dyn AuthValidator>>,
max_message_size: Option<usize>,
) -> Result<(), BoltError>
where
S: AsyncRead + AsyncWrite + Unpin + Send + 'static,
B: BoltBackend,
{
let adapted = WsStream::new(ws_stream);
run_handshake_and_connection(
adapted,
peer_addr,
backend,
session_manager,
auth_validator,
max_message_size,
)
.await;
Ok(())
}