# Patches v4 - VRAI fix du BoutonPower sur dedicated server ## ⚠️ Remplace les patches v3 qui étaient partiellement corrects La v3 (patch de CableAlimentation + CableRJ45) n'était PAS la cause racine. Le patch de v3 reste valide (évite des WARNINGS visuels), mais le vrai bug était ailleurs. ## 🎯 La vraie cause racine `CablageReseau.TrouverPortAlimentation()` cherchait les équipements dans **`NetworkClient.spawned`** au lieu de `NetworkServer.spawned`. Sur un dedicated server (serveur pur, pas host), `NetworkClient` n'est pas actif, donc `NetworkClient.spawned` est **vide**. Résultat : - `TrouverPortAlimentation()` retournait toujours `null` - La condition `if (prise != null && port != null && ...)` était fausse - `port.Connecter()` n'était JAMAIS appelé - `port.estConnecte` restait à `false` - `BoutonPower` refusait d'allumer l'équipement Le message `[Serveur] Câble alim créé` était trompeur parce qu'il apparaît AVANT la vérification, juste au moment de l'entrée dans la méthode. ## ✅ Le fix Ajout d'un helper universel `TrouverGameObjectNetId(netId)` dans `CablageReseau.cs` qui cherche dans le bon dictionnaire selon le contexte : - `NetworkServer.spawned` si on est serveur (dedicated OU host) - `NetworkClient.spawned` si on est purement client - `null` sinon Les 3 helpers `TrouverPortRJ45`, `TrouverPriseC13`, `TrouverPortAlimentation` utilisent maintenant ce helper universel. ## 📄 Script patché (1) - **`CablageReseau.cs`** — helper universel + refacto des 3 méthodes Trouver* ## 🚀 Actions à faire ### 1. Remplacer le script dans Unity Copie `Scripts_Modifies/CablageReseau.cs` dans `Assets/Scripts/`, écrase l'existant. ### 2. Rebuild Dedicated Server File → Build Settings → Dedicated Server Linux → Build. ⚠️ **Astuce** : si tu veux t'assurer que le build prend bien les derniers scripts, supprime le contenu du dossier de build avant de rebuilder. Unity fait parfois du cache agressif. ### 3. Redéploie sur la Debian ```bash # Arrêter le service sudo systemctl stop datacentersim-server # Remplacer le dossier # (ou scp -r depuis ton Windows) # Relancer sudo systemctl start datacentersim-server sudo journalctl -u datacentersim-server -f ``` ### 4. Test 1. Commande PDU + serveur 1U 2. Branche l'alim PDU → serveur (même procédure qu'avant) 3. Appuie sur Power → **DOIT S'ALLUMER** ✅ Attendu dans les logs serveur : plus de `BoutonPower: aucun câble d'alimentation branché !`. ## 🐛 Bug annexe détecté (pour plus tard) Les câbles RJ45 ne font RIEN côté serveur actuellement (la méthode `CmdCreerCableRJ45` broadcast juste aux clients sans créer d'état serveur). Conséquence : les logiques type "flux de paquets", "consommation bande passante", etc. ne tourneront pas si elles dépendent de l'existence des câbles RJ45 côté serveur. À réfléchir dans une future refonte quand tu implémenteras ce genre de features. Pour l'instant c'est OK, le multi fonctionne et les câbles s'affichent bien chez tous les clients via le Rpc. ## 🖥️ Rappel Ctrl+C qui ne marche pas Ajoute `-batchmode -nographics` aux arguments quand tu lances manuellement : ```bash ./DatacenterSim.x86_64 -server -port 7777 -batchmode -nographics ``` Ces flags forcent Unity à gérer proprement SIGINT. Ton service systemd les utilise déjà (ils sont dans `datacentersim-server.service`).