startup.rs 823 B

12345678910111213141516171819202122232425
  1. use crate::{context::AppContext, routers::*, ws::WSServer};
  2. use actix::Actor;
  3. use actix_web::{dev::Server, middleware, web, App, HttpServer, Scope};
  4. use std::{net::TcpListener, sync::Arc};
  5. pub fn run(app_ctx: Arc<AppContext>, listener: TcpListener) -> Result<Server, std::io::Error> {
  6. let server = HttpServer::new(move || {
  7. App::new()
  8. .wrap(middleware::Logger::default())
  9. .data(web::JsonConfig::default().limit(4096))
  10. .service(ws_scope())
  11. .data(app_ctx.ws_server())
  12. })
  13. .listen(listener)?
  14. .run();
  15. Ok(server)
  16. }
  17. fn ws_scope() -> Scope { web::scope("/ws").service(ws::start_connection) }
  18. pub async fn init_app_context() -> Arc<AppContext> {
  19. let ws_server = WSServer::new().start();
  20. let ctx = AppContext::new(ws_server);
  21. Arc::new(ctx)
  22. }