1
This commit is contained in:
parent
c10d482f9d
commit
047cff79cb
64
server/stat/src/listener/wslistener.rs
Normal file
64
server/stat/src/listener/wslistener.rs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
use std::rc::{Rc, Weak};
|
||||||
|
use std::cell::RefCell;
|
||||||
|
use r9_macro::SharedFromSelf;
|
||||||
|
use r9_macro_derive::SharedFromSelf;
|
||||||
|
use r9_macro_derive::Singleton;
|
||||||
|
use actix::StreamHandler;
|
||||||
|
use actix_web_actors::ws::{self, Message};
|
||||||
|
|
||||||
|
#[derive(SharedFromSelf)]
|
||||||
|
#[derive(Singleton)]
|
||||||
|
pub struct WsListener {
|
||||||
|
_self_wp: Weak::<RefCell::<Self>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Define HTTP actor
|
||||||
|
struct WsConn;
|
||||||
|
|
||||||
|
impl Actor for WsConn {
|
||||||
|
type Context = ws::WebsocketContext<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StreamHandler<Result<Message, ws::ProtocolError>> for WsConn {
|
||||||
|
fn handle(&mut self, item: Result<Message, ws::ProtocolError>, ctx: &mut Self::Context) {
|
||||||
|
match item {
|
||||||
|
Ok(Message::Text(text)) => ctx.text(text),
|
||||||
|
Ok(Message::Ping(msg)) => ctx.pong(&msg),
|
||||||
|
Ok(Message::Binary(bin)) => ctx.binary(bin),
|
||||||
|
Ok(Message::Close(reason)) => ctx.close(reason),
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
|
||||||
|
let resp = ws::start(WsConn{}, &req, stream);
|
||||||
|
println!("{:?}", resp);
|
||||||
|
resp
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn run_app(port: u16, app_state: Arc::<AppState>,
|
||||||
|
tx: std::sync::mpsc::Sender<ServerHandle>) -> std::io::Result<()> {
|
||||||
|
let server = HttpServer::new(move || {
|
||||||
|
WebApp::new()
|
||||||
|
.route("/",web::get().to(index))
|
||||||
|
})
|
||||||
|
.bind(("0.0.0.0", port))?
|
||||||
|
.workers(1)
|
||||||
|
.run();
|
||||||
|
|
||||||
|
let _ = tx.send(server.handle());
|
||||||
|
|
||||||
|
server.await
|
||||||
|
}
|
||||||
|
|
||||||
|
impl WsListener {
|
||||||
|
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let p = Self{
|
||||||
|
_self_wp: Default::default(),
|
||||||
|
};
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user