3.3 KiB
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 toujoursnull- La condition
if (prise != null && port != null && ...)était fausse port.Connecter()n'était JAMAIS appeléport.estConnecterestait àfalseBoutonPowerrefusait 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.spawnedsi on est serveur (dedicated OU host)NetworkClient.spawnedsi on est purement clientnullsinon
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
# 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
- Commande PDU + serveur 1U
- Branche l'alim PDU → serveur (même procédure qu'avant)
- 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 :
./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).