Introduction au Projet

Bienvenue dans la documentation de CyberCity. Ce projet est une application multi-plateforme complète permettant de créer, gérer et jouer à des jeux de plateau en temps réel. L'application est construite sur une architecture client-serveur moderne, utilisant Angular pour le frontend web, Flutter pour l'application mobile, et Node.js avec TypeScript pour le backend.

Architecture Globale

L'application est divisée en trois parties principales qui communiquent entre elles :

Client Web (Frontend)

Client Mobile

Serveur (Backend)

Flux de données et Communication

La communication entre les clients et le serveur se fait principalement de trois manières :

  1. API REST : Utilisée pour les opérations CRUD et l'authentification

    • Endpoints exposés par les contrôleurs (GameManagerController, AuthController, UserController, FriendsController, ChannelController, AvatarController)
    • Utilisée pour la gestion administrative des jeux et des comptes utilisateurs
  2. WebSockets (Socket.IO) : Communication bidirectionnelle en temps réel

    • Utilisée pour toutes les interactions de jeu (déplacements, combats, chat)
    • Mise à jour instantanée de l'état du jeu pour tous les joueurs
    • Système d'événements et de salles pour isoler les communications par partie
    • Notifications en temps réel (demandes d'amis, messages de chat)
  3. Firebase Authentication : Système d'authentification centralisé

    • Authentification email/mot de passe
    • Vérification des tokens ID
    • Gestion des sessions utilisateur

Le diagramme (à venir tkt ...) suivant illustre le flux typique d'une partie :

  1. Le joueur s'authentifie via Firebase (web ou mobile)
  2. Le système crée une session et authentifie le socket
  3. Il crée une partie ou rejoint une partie existante via un code ou depuis la liste publique
  4. Les joueurs se retrouvent dans une salle d'attente
  5. La partie commence, le serveur gère l'état du jeu et les tours
  6. Les joueurs interagissent via l'interface, envoyant des commandes au serveur
  7. Le serveur traite les commandes, met à jour l'état du jeu et diffuse les mises à jour
  8. À la fin de la partie, les prix en monnaie virtuelle sont distribués et les statistiques sont affichées

Organisation de la Documentation

La documentation est organisée en quatre sections principales pour faciliter la navigation et la compréhension du projet :

1. Documentation Principale (Vous êtes ici)

2. Documentation Coté Client

La documentation côté client web est organisée par pages et fonctionnalités principales :

3. Documentation Coté Serveur

La documentation côté serveur est organisée par domaines fonctionnels :

4. Documentation Mobile

La documentation de l'application mobile est organisée par pages et fonctionnalités principales :

Par où commencer ?

Si vous découvrez ce projet :

  1. Pour comprendre la structure globale :

    • Commencez par cette page principale pour avoir une vue d'ensemble
    • Consultez la section "Application Principale" dans la documentation client et "Infrastructure et Configuration" dans la documentation serveur
  2. Pour comprendre le système d'authentification :

    • Explorez la "Page d'Authentification" dans la documentation client
    • Consultez "Authentification et Gestion des Sessions" dans la documentation serveur
    • Regardez le module "Authentification" dans la documentation mobile
  3. Pour comprendre le flux utilisateur :

    • Explorez les pages dans l'ordre d'utilisation typique :
      • Page d'Authentification → Page d'Accueil → Création de Partie / Rejoindre → Création de Personnage → Salle d'Attente → Vue de Jeu → Statistiques
  4. Pour comprendre la logique du jeu :

    • Consultez la section "Gestion des Parties" dans la documentation serveur
    • Puis explorez le "Système de Combat" et la "Gestion des Joueurs"
  5. Pour comprendre l'interaction en temps réel :

    • Consultez la section "Gestion des WebSockets" dans la documentation serveur
    • Puis explorez les services de communication dans la documentation client et mobile
  6. Pour comprendre le système social :

    • Consultez "Système d'Amis" et "Système de Canaux" dans la documentation serveur
    • Explorez les services correspondants dans les documentations client et mobile

Entités Principales du Jeu

Pour mieux comprendre le domaine du jeu, voici les principales entités et leurs relations :

Fonctionnalités Principales

Authentification et Comptes Utilisateur

Système Social

Économie Virtuelle

Internationalisation

Application Mobile

Améliorations du Gameplay

Sécurité