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