use actix_web::web;
use actix_web::HttpRequest;
use actix_web::HttpResponse;
use actix_web::Responder;
use std::collections::HashMap;
use std::str::FromStr;
use crate::commons::Error;
use crate::core::request2::Render;
use crate::core::R;
pub mod connection;
pub mod ctx;
pub mod messages;
pub mod server;
pub use connection::*;
pub use ctx::*;
pub use messages::*;
pub use server::*;
pub use crate::websocket::devstreams;
pub async fn ws(
request: HttpRequest,
stream: web::Payload,
state: web::Data<ctx::AppState>,
) -> core::result::Result<HttpResponse, actix_web::Error> {
let srv = state.ss.clone();
actix_web_actors::ws::start(Connection::new(srv), &request, stream)
}
pub async fn broadcast(
request: HttpRequest,
state: web::Data<ctx::AppState>,
query: web::Query<HashMap<String, String>>,
data: actix_web::web::Bytes,
) -> impl Responder {
let _ty = query
.get("ty")
.ok_or_else(|| Error::invalid_request("Missing query string parameter: ty"))?;
let _data = crate::commons::bytes_to_string(data.to_vec())?;
state.ss.do_send(messages::Broadcast {
ty: OutputMessageType::from_str(_ty).map_err(|e| anyhow::anyhow!(e))?,
msg: _data,
});
request.json(200, R::ok(true))
}