Skip to main content

autoconnect_ws/
lib.rs

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