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

49 lines
1.2 KiB
Rust
Raw Normal View History

2022-08-07 01:24:40 +01:00
use std::{io, sync::Arc};
use actix_web::{get, middleware::Logger, post, web, App, HttpResponse, HttpServer, Responder};
2024-07-07 00:23:03 +01:00
use actix_web_lab::extract::Path;
2022-02-14 01:37:51 +00:00
mod broadcast;
2022-08-07 01:24:40 +01:00
use self::broadcast::Broadcaster;
2020-09-12 16:49:45 +01:00
#[actix_web::main]
2022-08-07 01:24:40 +01:00
async fn main() -> 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()
2022-08-07 01:24:40 +01:00
.app_data(web::Data::from(Arc::clone(&data)))
.service(index)
.service(event_stream)
.service(broadcast_msg)
.wrap(Logger::default())
})
2022-02-14 01:37:51 +00:00
.bind(("127.0.0.1", 8080))?
2022-08-07 01:24:40 +01:00
.workers(2)
2019-12-25 20:48:33 +04:00
.run()
2019-12-07 23:59:24 +06:00
.await
}
2022-08-07 01:24:40 +01:00
#[get("/")]
2019-12-07 23:59:24 +06:00
async fn index() -> impl Responder {
2024-07-07 00:23:03 +01:00
web::Html::new(include_str!("index.html").to_owned())
}
2022-08-07 01:24:40 +01:00
#[get("/events")]
async fn event_stream(broadcaster: web::Data<Broadcaster>) -> impl Responder {
broadcaster.new_client().await
}
2022-08-07 01:24:40 +01:00
#[post("/broadcast/{msg}")]
async fn broadcast_msg(
broadcaster: web::Data<Broadcaster>,
Path((msg,)): Path<(String,)>,
) -> impl Responder {
broadcaster.broadcast(&msg).await;
HttpResponse::Ok().body("msg sent")
}