Refactor websocket
This commit is contained in:
parent
ebac452a86
commit
f3d367e479
22 changed files with 924 additions and 773 deletions
29
src/main.rs
29
src/main.rs
|
|
@ -1,6 +1,5 @@
|
|||
use std::net::TcpListener;
|
||||
|
||||
use actix::{Actor, Arbiter};
|
||||
use actix_cors::Cors;
|
||||
use actix_web::middleware::TrailingSlash;
|
||||
use actix_web::{middleware, web, App, HttpServer};
|
||||
|
|
@ -8,13 +7,14 @@ use emgauwa_common::db::DbController;
|
|||
use emgauwa_common::errors::EmgauwaError;
|
||||
use emgauwa_common::utils::{drop_privileges, init_logging};
|
||||
use serde_json::Value;
|
||||
use tokio::spawn;
|
||||
use utoipa_swagger_ui::SwaggerUi;
|
||||
|
||||
use crate::app_state::AppState;
|
||||
use crate::server::WsServer;
|
||||
|
||||
mod app_state;
|
||||
mod handlers;
|
||||
mod settings;
|
||||
mod server;
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> Result<(), std::io::Error> {
|
||||
|
|
@ -34,17 +34,8 @@ async fn main() -> Result<(), std::io::Error> {
|
|||
.map_err(EmgauwaError::from)?;
|
||||
conn.close().await.map_err(EmgauwaError::from)?;
|
||||
|
||||
let app_state_arbiter = Arbiter::with_tokio_rt(|| {
|
||||
tokio::runtime::Builder::new_multi_thread()
|
||||
.worker_threads(2)
|
||||
.enable_all()
|
||||
.build()
|
||||
.unwrap()
|
||||
});
|
||||
let app_state_pool = pool.clone();
|
||||
let app_state = Actor::start_in_arbiter(&app_state_arbiter.handle(), move |_| {
|
||||
AppState::new(app_state_pool)
|
||||
});
|
||||
let (ws_server, ws_server_tx) = WsServer::new(pool.clone());
|
||||
let ws_server = spawn(ws_server.run());
|
||||
|
||||
let api_v1_json: Value =
|
||||
serde_json::from_str(include_str!("../api.v1.json")).map_err(EmgauwaError::from)?;
|
||||
|
|
@ -55,7 +46,7 @@ async fn main() -> Result<(), std::io::Error> {
|
|||
settings.server.port
|
||||
);
|
||||
|
||||
HttpServer::new(move || {
|
||||
let http_server = HttpServer::new(move || {
|
||||
let cors = Cors::default().allow_any_method().allow_any_header();
|
||||
|
||||
let origins = settings.origins.clone();
|
||||
|
|
@ -70,8 +61,8 @@ async fn main() -> Result<(), std::io::Error> {
|
|||
.wrap(cors)
|
||||
.wrap(middleware::Logger::default())
|
||||
.app_data(web::JsonConfig::default().error_handler(handlers::json_error_handler))
|
||||
.app_data(web::Data::new(ws_server_tx.clone()))
|
||||
.app_data(web::Data::new(pool.clone()))
|
||||
.app_data(web::Data::new(app_state.clone()))
|
||||
.app_data(web::Data::new(settings.clone()))
|
||||
.service(
|
||||
SwaggerUi::new("/api/docs/{_:.*}")
|
||||
|
|
@ -115,6 +106,8 @@ async fn main() -> Result<(), std::io::Error> {
|
|||
})
|
||||
.workers((pool_size / 2) as usize)
|
||||
.listen(listener)?
|
||||
.run()
|
||||
.await
|
||||
.run();
|
||||
|
||||
tokio::try_join!(http_server, async move { ws_server.await.unwrap() })?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue