use std::time::Instant; use actix::Addr; use actix_web::{get, web, HttpRequest, HttpResponse}; use actix_web_actors::ws; use emgauwa_lib::errors::EmgauwaError; use sqlx::{Pool, Sqlite}; use crate::app_state::AppState; use crate::handlers::v1::ws::controllers::ControllersWs; use crate::handlers::v1::ws::relays::RelaysWs; pub mod controllers; pub mod relays; #[get("/ws/controllers")] pub async fn ws_controllers( pool: web::Data<Pool<Sqlite>>, app_state: web::Data<Addr<AppState>>, req: HttpRequest, stream: web::Payload, ) -> Result<HttpResponse, EmgauwaError> { let resp = ws::start( ControllersWs { pool: pool.get_ref().clone(), controller_uid: None, app_state: app_state.get_ref().clone(), hb: Instant::now(), }, &req, stream, ) .map_err(|_| EmgauwaError::Internal(String::from("error starting websocket"))); resp } #[get("/ws/relays")] pub async fn ws_relays( app_state: web::Data<Addr<AppState>>, req: HttpRequest, stream: web::Payload, ) -> Result<HttpResponse, EmgauwaError> { let resp = ws::start( RelaysWs { app_state: app_state.get_ref().clone(), hb: Instant::now(), }, &req, stream, ) .map_err(|_| EmgauwaError::Internal(String::from("error starting websocket"))); resp }