autoconnect_ws/
lib.rs

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