post webrtc intégration
This commit is contained in:
+7
-14
@@ -7,7 +7,7 @@ use crate::metrics::{AppMetrics, reporter};
|
||||
use crate::repositories::Repositories;
|
||||
use crate::routes::gateway::{GatewayManager, RealtimeRouter};
|
||||
use crate::services::Services;
|
||||
use crate::udp::server::UdpServer;
|
||||
use crate::voice::VoiceService;
|
||||
use event_bus::EventBus;
|
||||
use migration::{Migrator, MigratorTrait};
|
||||
pub use state::AppState;
|
||||
@@ -65,6 +65,8 @@ impl App {
|
||||
};
|
||||
|
||||
let metrics = AppMetrics::new();
|
||||
let voice_metrics = Arc::clone(&metrics.voice);
|
||||
let voice = Arc::new(VoiceService::new(&config.network, voice_metrics));
|
||||
|
||||
let services = Arc::new(Services::new(repositories.clone(), event_bus.clone()));
|
||||
services.permission_sync.start_listen_event().await;
|
||||
@@ -90,6 +92,7 @@ impl App {
|
||||
gateway,
|
||||
event_bus,
|
||||
services,
|
||||
voice,
|
||||
};
|
||||
|
||||
Ok(Self { state })
|
||||
@@ -116,28 +119,20 @@ impl App {
|
||||
// Initialize HTTP Server
|
||||
let (http_server, http_shutdown_tx) = HttpServer::new(&config.network, self.state.clone());
|
||||
|
||||
// Initialize UDP service
|
||||
let udp_metrics = Arc::clone(&self.state.metrics.udp);
|
||||
let (udp_server, udp_shutdown_tx) = UdpServer::new(&config.network, udp_metrics);
|
||||
|
||||
// Lance le reporter central de métriques toutes les 30 secondes
|
||||
reporter::spawn_reporter(
|
||||
Arc::new(self.state.metrics.clone()),
|
||||
Duration::from_secs(30),
|
||||
);
|
||||
|
||||
// On lance les serveurs dans des tâches séparées
|
||||
// On lance le serveur HTTP dans une tâche séparée
|
||||
let mut http_handle = tokio::spawn(http_server.run());
|
||||
let mut udp_handle = tokio::spawn(udp_server.run());
|
||||
|
||||
// On arbitre : soit un signal arrive, soit une tâche se termine (erreur/crash)
|
||||
tokio::select! {
|
||||
res = &mut http_handle => {
|
||||
tracing::error!("HTTP server stopped unexpectedly: {:?}", res);
|
||||
}
|
||||
res = &mut udp_handle => {
|
||||
tracing::error!("UDP server stopped unexpectedly: {:?}", res);
|
||||
}
|
||||
_ = Self::shutdown_signal() => {
|
||||
tracing::info!("Shutdown signal received, initiating graceful shutdown...");
|
||||
}
|
||||
@@ -145,11 +140,9 @@ impl App {
|
||||
|
||||
// Dans tous les cas (Ctrl-C ou crash d'un service), on demande l'arrêt global
|
||||
let _ = http_shutdown_tx.send(());
|
||||
let _ = udp_shutdown_tx.send(());
|
||||
|
||||
// On attend que tout le monde ait fini de nettoyer
|
||||
// (Note: join! supporte les handles déjà terminés ou annulés)
|
||||
let _ = tokio::join!(http_handle, udp_handle);
|
||||
// On attend que la tâche HTTP termine
|
||||
let _ = http_handle.await;
|
||||
|
||||
Database::checkpoint_wal(&self.state.db).await?;
|
||||
Database::close(&self.state.db).await?;
|
||||
|
||||
@@ -4,6 +4,7 @@ use crate::models::server;
|
||||
use crate::repositories::Repositories;
|
||||
use crate::routes::gateway::GatewayManager;
|
||||
use crate::services::Services;
|
||||
use crate::voice::VoiceService;
|
||||
use event_bus::EventBus;
|
||||
use sea_orm::DatabaseConnection;
|
||||
use std::sync::{Arc, RwLock};
|
||||
@@ -19,6 +20,7 @@ pub struct AppState {
|
||||
pub gateway: Arc<GatewayManager>,
|
||||
pub event_bus: Arc<EventBus>,
|
||||
pub services: Arc<Services>,
|
||||
pub voice: Arc<VoiceService>,
|
||||
}
|
||||
|
||||
impl AppState {}
|
||||
|
||||
Reference in New Issue
Block a user