54 lines
1.5 KiB
Rust
54 lines
1.5 KiB
Rust
mod web_server;
|
||
mod state;
|
||
mod console_ui;
|
||
mod config;
|
||
mod chromium;
|
||
mod headless;
|
||
|
||
use state::{SharedState, Status};
|
||
|
||
#[tokio::main]
|
||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||
println!("Aurora Core gestartet!");
|
||
|
||
//config Datei Lesen
|
||
let exe_dir = std::env::current_exe()?.parent().unwrap().to_path_buf();
|
||
let mut cfg = config::read_config(&exe_dir)?;
|
||
|
||
// Gemeinsamen Status anlegen
|
||
let state: SharedState = std::sync::Arc::new(std::sync::Mutex::new(Status {
|
||
web_server_active: false,
|
||
plugin_engine_active: false,
|
||
chromium: Default::default(),
|
||
headless: Default::default(),
|
||
loaded_plugins: vec![],
|
||
running_jobs: vec![],
|
||
}));
|
||
|
||
|
||
// UI sofort anzeigen – läuft in eigenem Thread
|
||
let ui_state = state.clone();
|
||
let ui_thread = std::thread::spawn(move || {
|
||
// UI blockiert hier bis q/ESC – aber nur in DIESEM Thread
|
||
let _ = console_ui::start_ui(ui_state);
|
||
});
|
||
|
||
//Chromium Check + Download
|
||
chromium::start_check(&mut cfg, &exe_dir, state.clone()).await?;
|
||
|
||
|
||
// Webserver im Hintergrund starten
|
||
let _server = web_server::start(state.clone(), cfg.server.port).await?;
|
||
|
||
// Headless Engine starten (Stub → Starting → Ready)
|
||
headless::start(state.clone()).await?;
|
||
|
||
|
||
// Main-Thread bleibt bis UI beendet wird (q/ESC)
|
||
let _ = ui_thread.join();
|
||
|
||
// (Optional) Nach UI-Ende Webserver-Task abbrechen:
|
||
// _server.abort();
|
||
|
||
Ok(())
|
||
}
|