use crate::component::auth::LoggedUser; use crate::component::ws::{MessageReceivers, WSClient, WSServer}; use actix::Addr; use actix_web::web::{Data, Path, Payload}; use actix_web::{get, web, HttpRequest, HttpResponse, Result, Scope}; use actix_web_actors::ws; pub fn ws_scope() -> Scope { web::scope("/ws").service(establish_ws_connection) } #[get("/{token}")] pub async fn establish_ws_connection( request: HttpRequest, payload: Payload, token: Path, server: Data>, msg_receivers: Data, ) -> Result { tracing::info!("establish_ws_connection"); let user = LoggedUser::from_token(token.clone())?; let client = WSClient::new(user, server.get_ref().clone(), msg_receivers); let result = ws::start(client, &request, payload); match result { Ok(response) => Ok(response), Err(e) => { tracing::error!("ws connection error: {:?}", e); Err(e) } } }