1
0
mirror of https://github.com/actix/examples synced 2025-02-08 20:06:07 +01:00

52 lines
1.4 KiB
Rust
Raw Normal View History

2022-02-14 01:37:51 +00:00
use actix_web::{
http::header::{self, ContentType},
middleware,
web::{self, Data, Path},
App, HttpResponse, HttpServer, Responder,
};
mod broadcast;
use broadcast::Broadcaster;
2020-09-12 16:49:45 +01:00
#[actix_web::main]
2019-12-07 23:59:24 +06:00
async fn main() -> std::io::Result<()> {
2022-02-14 01:37:51 +00:00
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
let data = Broadcaster::create();
2022-02-14 01:37:51 +00:00
log::info!("starting HTTP server at http://localhost:8080");
HttpServer::new(move || {
App::new()
2019-12-20 22:30:26 +06:00
.app_data(data.clone())
.wrap(middleware::Logger::default())
.route("/", web::get().to(index))
.route("/events", web::get().to(new_client))
.route("/broadcast/{msg}", web::get().to(broadcast))
})
2022-02-14 01:37:51 +00:00
.bind(("127.0.0.1", 8080))?
2019-12-25 20:48:33 +04:00
.run()
2019-12-07 23:59:24 +06:00
.await
}
2019-12-07 23:59:24 +06:00
async fn index() -> impl Responder {
2022-02-14 01:37:51 +00:00
let index_html = include_str!("index.html");
HttpResponse::Ok()
2022-02-14 01:37:51 +00:00
.append_header(ContentType::html())
.body(index_html)
}
async fn new_client(broadcaster: Data<Broadcaster>) -> impl Responder {
let rx = broadcaster.new_client();
HttpResponse::Ok()
2022-02-14 01:37:51 +00:00
.append_header((header::CONTENT_TYPE, "text/event-stream"))
.streaming(rx)
}
async fn broadcast(msg: Path<String>, broadcaster: Data<Broadcaster>) -> impl Responder {
broadcaster.send(&msg.into_inner());
HttpResponse::Ok().body("msg sent")
}