101 lines
3.3 KiB
Markdown
101 lines
3.3 KiB
Markdown
# 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`).
|