# 🎮 Système de Gestion du Serveur Minecraft

## Architecture

Le système utilise une architecture basée sur des **fichiers de signaux** pour permettre à l'application web de contrôler le serveur Minecraft.

```
┌─────────────────┐         ┌──────────────────┐         ┌─────────────────┐
│   Interface     │────────▶│   API Web        │────────▶│  Fichiers de    │
│   Web (React)   │         │  (Node.js)       │         │  Signaux        │
└─────────────────┘         └──────────────────┘         └────────┬────────┘
                                                                   │
                                                                   │ Surveillance
                                                                   │ (toutes les 3s)
                                                                   ▼
                            ┌──────────────────┐         ┌─────────────────┐
                            │   Serveur        │◀────────│  Server         │
                            │   Minecraft      │         │  Manager        │
                            └──────────────────┘         └─────────────────┘
```

## Composants

### 1. Application Web (Frontend)
- Interface utilisateur
- Boutons : Redémarrer, Arrêter, Sauvegarder
- Affichage du statut en temps réel

### 2. API Web (Backend)
- Endpoints REST : `/server/restart`, `/server/stop`, `/server/status`
- **Crée des fichiers de signaux** au lieu d'envoyer directement les commandes
- Fichiers créés dans : `NationsGlory_ServeurBuild_Red/.web-admin/commands/`

### 3. Server Manager (Bash Script)
- **Surveille** le dossier `.web-admin/commands/` toutes les 3 secondes
- **Détecte** les fichiers de signaux (`restart.flag`, `stop.flag`)
- **Exécute** les actions correspondantes
- **Gère** le cycle de vie du serveur Minecraft

### 4. Fichiers de Signaux

| Fichier | Créé par | Lu par | Action |
|---------|----------|--------|--------|
| `restart.flag` | API Web | Server Manager | Redémarrer le serveur |
| `stop.flag` | API Web | Server Manager | Arrêter le serveur |
| `status.json` | Server Manager | API Web | Statut du serveur |
| `server.pid` | Server Manager | Server Manager | PID du processus |

## Workflow de Redémarrage

```
1. Utilisateur clique "Redémarrer" dans l'interface web
   ↓
2. Frontend envoie POST /api/server/restart
   ↓
3. Backend (API) crée le fichier restart.flag
   ↓
4. Server Manager détecte restart.flag (boucle de surveillance)
   ↓
5. Server Manager exécute la séquence :
   a) save-all (sauvegarde du monde)
   b) say "Redémarrage dans 30s" (avertissement joueurs)
   c) sleep 20s
   d) say "Redémarrage dans 10s"
   e) sleep 10s
   f) stop (arrêt du serveur)
   g) sleep 5s
   h) java -jar mcpc.jar (redémarrage)
   i) Suppression de restart.flag
   ↓
6. Serveur redémarré
```

## Installation et Démarrage

### Prérequis

```bash
# Installer mcrcon (RCON client)
sudo apt-get install -y mcrcon

# Installer screen (gestion de sessions)
sudo apt-get install -y screen
```

### Démarrage Simple

```bash
cd "/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red"

# Lancer le script de démarrage rapide
./quick-start.sh
```

### Démarrage Manuel

```bash
# Créer une session screen
screen -S minecraft-manager

# Lancer le manager en mode surveillance
cd "/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red"
./server-manager.sh monitor

# Détacher : Ctrl+A puis D
```

### Vérification

```bash
# Voir les sessions actives
screen -ls

# Se reconnecter
screen -r minecraft-manager

# Voir le statut
cat .web-admin/commands/status.json
```

## Fichiers Créés

```
NationsGlory_ServeurBuild_Red/
├── server-manager.sh          # Script de gestion principal
├── quick-start.sh             # Script de démarrage rapide
├── SERVER_MANAGER.md          # Documentation détaillée
└── .web-admin/
    └── commands/
        ├── README.md          # Description des fichiers
        ├── restart.flag       # Signal de redémarrage
        ├── stop.flag          # Signal d'arrêt
        ├── status.json        # Statut du serveur
        └── server.pid         # PID du processus
```

## Avantages de cette Architecture

✅ **Découplage** : L'API web n'a pas besoin de connaître les détails du serveur Minecraft

✅ **Fiabilité** : Si l'API plante, le serveur Minecraft continue de tourner

✅ **Flexibilité** : Facile d'ajouter de nouvelles commandes (créer de nouveaux fichiers de signaux)

✅ **Persistance** : Les signaux sont stockés sur disque, pas de perte de commandes

✅ **Logs** : Le server-manager affiche tous les événements en temps réel

✅ **Sécurité** : Pas de shell injection possible via l'API web

## Commandes Utiles

```bash
# Lancer le manager
./quick-start.sh

# Voir les logs en temps réel
screen -r minecraft-manager

# Tester manuellement un redémarrage
echo "$(date)" > .web-admin/commands/restart.flag

# Tester manuellement un arrêt
echo "$(date)" > .web-admin/commands/stop.flag

# Voir le statut
cat .web-admin/commands/status.json

# Arrêter le manager proprement
screen -S minecraft-manager -X quit
```

## Dépannage

### Le serveur ne redémarre pas

1. Vérifier que le manager tourne :
   ```bash
   screen -ls
   screen -r minecraft-manager
   ```

2. Vérifier les fichiers de signaux :
   ```bash
   ls -la .web-admin/commands/
   ```

3. Vérifier mcrcon :
   ```bash
   mcrcon -H localhost -P 25575 -p Landau8210 "list"
   ```

### L'interface web ne répond pas

1. Vérifier que le backend tourne :
   ```bash
   curl http://localhost:4001/api/health
   ```

2. Vérifier les logs :
   ```bash
   tail -f /tmp/webserver.log
   ```

## Notes Importantes

⚠️ **Le server-manager DOIT être actif** pour que l'application web puisse contrôler le serveur

⚠️ Le manager vérifie les signaux **toutes les 3 secondes**, il peut y avoir un léger délai

⚠️ Le redémarrage prend environ **30 secondes** (compte à rebours pour les joueurs)

⚠️ Toujours utiliser l'interface web pour arrêter/redémarrer, ne pas killer le processus directement

## Support

Pour toute question ou problème, consultez :
- [SERVER_MANAGER.md](./SERVER_MANAGER.md) - Documentation complète du manager
- [CHANGELOG.md](../WebNationsGlory_ServeurBuild_Red/CHANGELOG.md) - Historique des modifications
- [API_RCON.md](../WebNationsGlory_ServeurBuild_Red/API_RCON.md) - Documentation de l'API RCON
