1
0
mirror of https://github.com/actix/examples synced 2025-06-29 02:10:36 +02:00

convert more examples

This commit is contained in:
Nikolay Kim
2019-12-16 13:09:54 +06:00
parent ca3f11b59e
commit 31b5b7aa49
10 changed files with 145 additions and 167 deletions

View File

@ -1,7 +1,5 @@
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate actix;
use std::time::{Duration, Instant};
@ -20,7 +18,7 @@ const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(5);
const CLIENT_TIMEOUT: Duration = Duration::from_secs(10);
/// Entry point for our route
fn chat_route(
async fn chat_route(
req: HttpRequest,
stream: web::Payload,
srv: web::Data<Addr<server::ChatServer>>,
@ -78,7 +76,7 @@ impl Actor for WsChatSession {
// something is wrong with chat server
_ => ctx.stop(),
}
fut::ok(())
fut::ready(())
})
.wait(ctx);
}
@ -100,8 +98,20 @@ impl Handler<session::Message> for WsChatSession {
}
/// WebSocket message handler
impl StreamHandler<ws::Message, ws::ProtocolError> for WsChatSession {
fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) {
impl StreamHandler<Result<ws::Message, ws::ProtocolError>> for WsChatSession {
fn handle(
&mut self,
msg: Result<ws::Message, ws::ProtocolError>,
ctx: &mut Self::Context,
) {
let msg = match msg {
Err(_) => {
ctx.stop();
return;
}
Ok(msg) => msg,
};
println!("WEBSOCKET MESSAGE: {:?}", msg);
match msg {
ws::Message::Ping(msg) => {
@ -133,7 +143,7 @@ impl StreamHandler<ws::Message, ws::ProtocolError> for WsChatSession {
}
_ => println!("Something is wrong"),
}
fut::ok(())
fut::ready(())
})
.wait(ctx)
// .wait(ctx) pauses all events in context,
@ -180,7 +190,7 @@ impl StreamHandler<ws::Message, ws::ProtocolError> for WsChatSession {
ws::Message::Close(_) => {
ctx.stop();
}
ws::Message::Nop => (),
_ => (),
}
}
}
@ -206,14 +216,14 @@ impl WsChatSession {
return;
}
ctx.ping("");
ctx.ping(b"");
});
}
}
fn main() -> std::io::Result<()> {
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
env_logger::init();
let sys = actix::System::new("websocket-example");
// Start chat server actor
let server = server::ChatServer::default().start();
@ -221,10 +231,12 @@ fn main() -> std::io::Result<()> {
// Start tcp server in separate thread
let srv = server.clone();
Arbiter::new().exec(move || {
session::TcpServer::new("127.0.0.1:12345", srv);
session::tcp_server("127.0.0.1:12345", srv);
Ok::<_, ()>(())
});
println!("Started http server: 127.0.0.1:8080");
// Create Http server with websocket support
HttpServer::new(move || {
App::new()
@ -241,8 +253,6 @@ fn main() -> std::io::Result<()> {
.service(fs::Files::new("/static/", "static/"))
})
.bind("127.0.0.1:8080")?
.start();
println!("Started http server: 127.0.0.1:8080");
sys.run()
.start()
.await
}