post webrtc intégration

This commit is contained in:
2026-09-12 21:11:14 +02:00
parent 6b8cccc082
commit 9a07b368d6
27 changed files with 2180 additions and 584 deletions
+7 -14
View File
@@ -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?;
+2
View File
@@ -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 {}