dcsim-gameserver/Patchs/v4/README_PATCHES_V4.md

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 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

# 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 :

./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).