autoconnect_ws/
lib.rs

1#[macro_use]
2extern crate slog_scope;
3
4use actix_web::{
5    Error, HttpRequest, HttpResponse,
6    http::header::{HeaderValue, USER_AGENT},
7    web,
8};
9
10use autoconnect_settings::AppState;
11
12mod error;
13mod handler;
14mod ping;
15mod session;
16#[cfg(test)]
17mod test;
18
19/// Handles connected WebSocket clients to a WebPush server
20pub async fn ws_handler(
21    req: HttpRequest,
22    body: web::Payload,
23    app_state: web::Data<AppState>,
24) -> Result<HttpResponse, Error> {
25    debug!("🔌 Got connection");
26    let (response, session, msg_stream) = actix_ws::handle(&req, body)?;
27    let ua = req
28        .headers()
29        .get(USER_AGENT)
30        .unwrap_or(&HeaderValue::from_static(""))
31        .to_str()
32        .unwrap_or_default()
33        .to_owned();
34    handler::spawn_webpush_ws(session, msg_stream, app_state.into_inner(), ua);
35    Ok(response)
36}