Implémentation du WebRenderer et améliorations du serveur
Ajout de la fonctionnalité WebRenderer permettant au navigateur de se connecter comme renderer UPnP. - Implémentation du composant Vue useWebRenderer pour gérer la connexion WebSocket et le contrôle audio - Ajout d'un proxy WebSocket dans Vite pour rediriger les requêtes /api/webrenderer/ws vers le serveur - Modification du serveur pour permettre l'enregistrement dynamique de routes et extraction du JoinHandle - Améliorations du parsing des métadonnées AVTransport pour gérer les types String et DIDLLite - Ajout de la détection et du nommage des navigateurs dans le WebRenderer - Mise à jour des dépendances avec tower 0.5.2 - Correction de la gestion des threads lors de l'arrêt du serveur HTTP
This commit is contained in:
@@ -550,7 +550,6 @@ impl Server {
|
||||
|
||||
self.join_handle = Some(tokio::spawn(async move {
|
||||
let server_future = async {
|
||||
let r = router.read().await.clone();
|
||||
let listener = match tokio::net::TcpListener::bind(addr).await {
|
||||
Ok(l) => l,
|
||||
Err(e) => {
|
||||
@@ -559,7 +558,19 @@ impl Server {
|
||||
}
|
||||
};
|
||||
|
||||
axum::serve(listener, r.into_make_service())
|
||||
// Utiliser un router dynamique qui relit le router à chaque requête.
|
||||
// Cela permet d'enregistrer de nouvelles routes après le démarrage du serveur
|
||||
// (ex: WebRenderer dynamique).
|
||||
let dynamic_router = axum::Router::new().fallback(move |req: axum::extract::Request| {
|
||||
let router = router.clone();
|
||||
async move {
|
||||
use tower::ServiceExt;
|
||||
let r = router.read().await.clone();
|
||||
r.into_service::<axum::body::Body>().oneshot(req).await
|
||||
}
|
||||
});
|
||||
|
||||
axum::serve(listener, dynamic_router.into_make_service())
|
||||
.with_graceful_shutdown(async move {
|
||||
let _ = shutdown_rx.await;
|
||||
})
|
||||
@@ -598,6 +609,12 @@ impl Server {
|
||||
}
|
||||
}
|
||||
|
||||
/// Extrait le JoinHandle du serveur HTTP pour pouvoir l'awaiter
|
||||
/// sans tenir le write lock du serveur global.
|
||||
pub fn take_join_handle(&mut self) -> Option<JoinHandle<()>> {
|
||||
self.join_handle.take()
|
||||
}
|
||||
|
||||
/// Retourne l'URL de base complète du serveur (schéma + hôte + port).
|
||||
///
|
||||
/// La valeur configurable peut omettre le schéma ou le port ; cette méthode
|
||||
|
||||
Reference in New Issue
Block a user