AppFlowy-Cloud/src/api/ws.rs

32 lines
995 B
Rust

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<String>,
server: Data<Addr<WSServer>>,
msg_receivers: Data<MessageReceivers>,
) -> Result<HttpResponse> {
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)
}
}
}