1
0
mirror of https://github.com/actix/examples synced 2025-02-17 07:23:29 +01:00

update chat-broker example and fmt

This commit is contained in:
Nikolay Kim 2019-07-11 15:02:25 +06:00
parent 4aa663e794
commit 93275d7986
11 changed files with 51 additions and 61 deletions

View File

@ -37,6 +37,6 @@ members = [
"web-cors/backend", "web-cors/backend",
"websocket", "websocket",
"websocket-chat", "websocket-chat",
#"websocket-chat-broker", "websocket-chat-broker",
"websocket-tcp-chat", "websocket-tcp-chat",
] ]

View File

@ -84,7 +84,7 @@ fn main() -> io::Result<()> {
App::new() App::new()
// cookie session middleware // cookie session middleware
.wrap(CookieSession::signed(&[0; 32]).secure(false)) .wrap(CookieSession::signed(&[0; 32]).secure(false))
// enable logger - always register actix-web Logger middleware last // enable logger - always register actix-web Logger middleware last
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
// register favicon // register favicon
.service(favicon) .service(favicon)

View File

@ -27,7 +27,7 @@ fn main() -> std::io::Result<()> {
.name("auth-example") .name("auth-example")
.secure(false), .secure(false),
)) ))
// enable logger - always register actix-web Logger middleware last // enable logger - always register actix-web Logger middleware last
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
.service(web::resource("/login").route(web::post().to(login))) .service(web::resource("/login").route(web::post().to(login)))
.service(web::resource("/logout").to(logout)) .service(web::resource("/logout").to(logout))

View File

@ -13,41 +13,41 @@ use std::io;
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
struct Error { struct Error {
msg: String, msg: String,
status: u16, status: u16,
} }
impl Display for Error { impl Display for Error {
fn fmt(&self, f: &mut Formatter) -> FmtResult { fn fmt(&self, f: &mut Formatter) -> FmtResult {
write!(f, "{}", to_string_pretty(self).unwrap()) write!(f, "{}", to_string_pretty(self).unwrap())
} }
} }
impl ResponseError for Error { impl ResponseError for Error {
// builds the actual response to send back when an error occurs // builds the actual response to send back when an error occurs
fn render_response(&self) -> HttpResponse { fn render_response(&self) -> HttpResponse {
let err_json = json!({ "error": self.msg }); let err_json = json!({ "error": self.msg });
HttpResponse::build(StatusCode::from_u16(self.status).unwrap()).json(err_json) HttpResponse::build(StatusCode::from_u16(self.status).unwrap()).json(err_json)
} }
} }
fn index(_: HttpRequest) -> impl Future<Item = HttpResponse, Error = Error> { fn index(_: HttpRequest) -> impl Future<Item = HttpResponse, Error = Error> {
err(Error { err(Error {
msg: "an example error message".to_string(), msg: "an example error message".to_string(),
status: 400, status: 400,
}) })
} }
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
let sys = System::new("json_error_example"); let sys = System::new("json_error_example");
let ip_address = "127.0.0.1:8000"; let ip_address = "127.0.0.1:8000";
HttpServer::new(|| App::new().service(resource("/").route(get().to_async(index)))) HttpServer::new(|| App::new().service(resource("/").route(get().to_async(index))))
.bind(ip_address) .bind(ip_address)
.expect("Can not bind to port 8000") .expect("Can not bind to port 8000")
.start(); .start();
println!("Running server on {}", ip_address); println!("Running server on {}", ip_address);
sys.run() sys.run()
} }

View File

@ -32,7 +32,8 @@ fn main() {
App::new() App::new()
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
.service(web::resource("/").route(web::post().to(index))) .service(web::resource("/").route(web::post().to(index)))
}).bind("127.0.0.1:8081") })
.bind("127.0.0.1:8081")
.unwrap() .unwrap()
.shutdown_timeout(1) .shutdown_timeout(1)
.start(); .start();

View File

@ -28,7 +28,7 @@ fn main() -> std::io::Result<()> {
App::new() App::new()
// redis session middleware // redis session middleware
.wrap(RedisSession::new("127.0.0.1:6379", &[0; 32])) .wrap(RedisSession::new("127.0.0.1:6379", &[0; 32]))
// enable logger - always register actix-web Logger middleware last // enable logger - always register actix-web Logger middleware last
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
// register simple route, handle all methods // register simple route, handle all methods
.service(web::resource("/").to(index)) .service(web::resource("/").to(index))

View File

@ -1,6 +1,6 @@
use actix::{Handler, Message}; use actix::{Handler, Message};
use actix_web::{dev::Payload, Error, HttpRequest, FromRequest};
use actix_identity::Identity; use actix_identity::Identity;
use actix_web::{dev::Payload, Error, FromRequest, HttpRequest};
use bcrypt::verify; use bcrypt::verify;
use diesel::prelude::*; use diesel::prelude::*;

View File

@ -23,10 +23,7 @@ fn index(hb: web::Data<Handlebars>) -> HttpResponse {
} }
#[get("/{user}/{data}")] #[get("/{user}/{data}")]
fn user( fn user(hb: web::Data<Handlebars>, info: web::Path<(String, String)>) -> HttpResponse {
hb: web::Data<Handlebars>,
info: web::Path<(String, String)>,
) -> HttpResponse {
let data = json!({ let data = json!({
"user": info.0, "user": info.0,
"data": info.1 "data": info.1

View File

@ -2,17 +2,20 @@
name = "websocket-broker-example" name = "websocket-broker-example"
version = "0.1.0" version = "0.1.0"
authors = ["Chris Ricketts <chris.ricketts@steribar.com>"] authors = ["Chris Ricketts <chris.ricketts@steribar.com>"]
workspace = "../" edition = "2018"
workspace = ".."
[[bin]] [[bin]]
name = "server" name = "server"
path = "src/main.rs" path = "src/main.rs"
[dependencies] [dependencies]
rand = "*" rand = "0.6"
futures = "0.1.24" futures = "0.1.24"
actix = "0.7" actix = "0.8.2"
actix-web = "0.7" actix-web = "1.0"
actix-broker = "0.1.4" actix-files = "0.1"
actix-web-actors = "1.0"
actix-broker = "0.2.0"
log = "0.4.5" log = "0.4.5"
simple_logger = "0.5.0" simple_logger = "0.5.0"

View File

@ -1,24 +1,18 @@
#[macro_use] #[macro_use]
extern crate actix;
extern crate actix_broker;
extern crate actix_web;
extern crate futures;
extern crate rand;
#[macro_use]
extern crate log; extern crate log;
extern crate simple_logger;
use actix::fut; use actix::fut;
use actix::prelude::*; use actix::prelude::*;
use actix_broker::BrokerIssue; use actix_broker::BrokerIssue;
use actix_web::server::HttpServer; use actix_files::Files;
use actix_web::{fs, ws, App, Error, HttpRequest, HttpResponse}; use actix_web::{web, App, Error, HttpRequest, HttpResponse, HttpServer};
use actix_web_actors::ws;
mod server; mod server;
use server::*; use server::*;
fn chat_route(req: &HttpRequest<()>) -> Result<HttpResponse, Error> { fn chat_route(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
ws::start(req, WsChatSession::default()) ws::start(WsChatSession::default(), &req, stream)
} }
#[derive(Default)] #[derive(Default)]
@ -34,7 +28,7 @@ impl WsChatSession {
// First send a leave message for the current room // First send a leave message for the current room
let leave_msg = LeaveRoom(self.room.clone(), self.id); let leave_msg = LeaveRoom(self.room.clone(), self.id);
// issue_sync comes from having the `BrokerIssue` trait in scope. // issue_sync comes from having the `BrokerIssue` trait in scope.
self.issue_sync(leave_msg, ctx); self.issue_system_sync(leave_msg, ctx);
// Then send a join message for the new room // Then send a join message for the new room
let join_msg = JoinRoom( let join_msg = JoinRoom(
room_name.to_owned(), room_name.to_owned(),
@ -79,7 +73,7 @@ impl WsChatSession {
); );
let msg = SendMessage(self.room.clone(), self.id, content); let msg = SendMessage(self.room.clone(), self.id, content);
// issue_async comes from having the `BrokerIssue` trait in scope. // issue_async comes from having the `BrokerIssue` trait in scope.
self.issue_async(msg); self.issue_system_async(msg);
} }
} }
@ -147,24 +141,19 @@ impl StreamHandler<ws::Message, ws::ProtocolError> for WsChatSession {
} }
} }
fn main() { fn main() -> std::io::Result<()> {
let sys = actix::System::new("websocket-broker-example"); let sys = actix::System::new("websocket-broker-example");
simple_logger::init_with_level(log::Level::Info).unwrap(); simple_logger::init_with_level(log::Level::Info).unwrap();
HttpServer::new(move || { HttpServer::new(move || {
App::new() App::new()
.resource("/ws/", |r| r.route().f(chat_route)) .service(web::resource("/ws/").to(chat_route))
.handler( .service(Files::new("/", "./static/").index_file("index.html"))
"/",
fs::StaticFiles::new("./static/")
.unwrap()
.index_file("index.html"),
)
}) })
.bind("127.0.0.1:8080") .bind("127.0.0.1:8080")
.unwrap() .unwrap()
.start(); .start();
info!("Started http server: 127.0.0.1:8080"); info!("Started http server: 127.0.0.1:8080");
let _ = sys.run(); sys.run()
} }

View File

@ -81,8 +81,8 @@ impl Actor for WsChatServer {
type Context = Context<Self>; type Context = Context<Self>;
fn started(&mut self, ctx: &mut Self::Context) { fn started(&mut self, ctx: &mut Self::Context) {
self.subscribe_async::<LeaveRoom>(ctx); self.subscribe_system_async::<LeaveRoom>(ctx);
self.subscribe_async::<SendMessage>(ctx); self.subscribe_system_async::<SendMessage>(ctx);
} }
} }