35 lines
968 B
Rust
35 lines
968 B
Rust
use actix::{Actor, StreamHandler};
|
|
use actix_web::*;
|
|
use actix_web::{web, Error, HttpRequest, HttpResponse};
|
|
use actix_web_actors::ws;
|
|
use log::*;
|
|
|
|
/// Define HTTP actor
|
|
struct MyWs;
|
|
|
|
impl Actor for MyWs {
|
|
type Context = ws::WebsocketContext<Self>;
|
|
}
|
|
|
|
/// Handler for ws::Message message
|
|
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for MyWs {
|
|
fn handle(&mut self, msg: Result<ws::Message, ws::ProtocolError>, ctx: &mut Self::Context) {
|
|
match msg {
|
|
Ok(ws::Message::Ping(msg)) => ctx.pong(&msg),
|
|
Ok(ws::Message::Text(text)) => ctx.text(text),
|
|
Ok(ws::Message::Binary(bin)) => ctx.binary(bin),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[get("/ws")]
|
|
pub async fn ws_index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
|
|
let resp = ws::start(MyWs {}, &req, stream);
|
|
match &resp {
|
|
Ok(resp) => info!("{:?}", resp),
|
|
Err(e) => error!("{:?}", e),
|
|
}
|
|
resp
|
|
}
|