Application Principale

Vue d'ensemble

L'application principale constitue le cœur du système, orchestrant le fonctionnement global de l'application et établissant les bases pour tous les autres composants. Elle comprend la configuration du serveur, l'initialisation de l'application, le routage, et l'intégration avec la base de données MongoDB. Cette section couvre les aspects fondamentaux qui permettent le fonctionnement de toutes les fonctionnalités du jeu.

Composants principaux

AppComponent

Le composant AppComponent représente la racine de l'application Angular. Il affiche un écran de chargement lors des transitions de pages et gère les animations entre les routes.

Propriétés

Propriété Type Description
isLoading boolean Indique si l'écran de chargement doit être affiché

Méthodes

constructor(private router: Router)

Description : Initialise le composant et configure les écouteurs d'événements pour les transitions de navigation.
Paramètres : router - Service de routage Angular.

prepareRoute(outlet: RouterOutlet)

Description : Prépare les données d'animation pour les transitions entre routes.
Paramètres : outlet - Référence à l'outlet du routeur.
Retour : Données d'animation pour la route active.

onActivate()

Description : Ramène le défilement en haut de la page lors du changement de route.
Retour : void

Éléments HTML importants

Application (Backend)

La classe Application est responsable de l'initialisation du serveur Express et de la configuration de l'API REST.

Propriétés

Propriété Type Description
app express.Application Instance de l'application Express
gameManagerController GameManagerController Contrôleur de gestion des jeux
mongoClient MongoClient Client de connexion à MongoDB

Méthodes

constructor(gameManagerController: GameManagerController)

Description : Initialise l'application avec le contrôleur de gestion des jeux.
Paramètres : gameManagerController - Contrôleur pour les opérations sur les jeux.

bindRoutes()

Description : Configure les routes de l'API.
Retour : void
Détails : Attache le routeur du contrôleur à la route '/game-manager'.

private config()

Description : Configure les middlewares Express.
Retour : void
Détails : Configure les limites de taille pour les requêtes JSON, CORS, etc.

private async initializeDatabase()

Description : Initialise la connexion à la base de données MongoDB.
Retour : Promise<void>
Détails : Établit la connexion à la base de données via MongoClient.

Server

La classe Server est responsable de la création et du démarrage du serveur HTTP et du serveur Socket.IO.

Propriétés

Propriété Type Description
io SocketIOServer Instance du serveur Socket.IO
server http.Server Instance du serveur HTTP

Méthodes

constructor(private readonly application: Application)

Description : Initialise le serveur avec l'instance de l'application.
Paramètres : application - Instance de l'application Express.

init()

Description : Initialise et démarre le serveur HTTP et Socket.IO.
Retour : void
Détails : Configure les ports et les gestionnaires d'événements.

getIO()

Description : Récupère l'instance du serveur Socket.IO.
Retour : SocketIOServer - Instance du serveur Socket.IO.

private onError(error: NodeJS.ErrnoException)

Description : Gère les erreurs lors du démarrage du serveur.
Paramètres : error - Erreur rencontrée.
Retour : void
Détails : Gère différents types d'erreurs (EACCES, EADDRINUSE, etc.).

private onListening()

Description : Appelé lorsque le serveur commence à écouter.
Retour : void
Détails : Affiche le port d'écoute.

GameManagerController

Le contrôleur GameManagerController gère toutes les opérations CRUD liées aux jeux via l'API REST.

Propriétés

Propriété Type Description
gameVerifier GameVerifierService Service de vérification des jeux
databaseService DatabaseService Service d'accès à la base de données
router Router Routeur Express pour définir les endpoints

Méthodes

constructor(gameVerifier: GameVerifierService, databaseService: DatabaseService)

Description : Initialise le contrôleur avec les services nécessaires.
Paramètres :

configureRoutes()

Description : Configure les routes de l'API pour la gestion des jeux.
Retour : void
Détails : Définit les gestionnaires pour les différentes routes (GET, PUT, POST, DELETE, PATCH).

Configuration et initialisation

Main (Angular)

Le fichier main.ts configure et initialise l'application Angular avec les routes et les fournisseurs nécessaires.

Routes

Route Composant Description
/ (défaut) MainPageComponent Page d'accueil
/${AppRoutes.Home} MainPageComponent Page d'accueil
/${AppRoutes.Games} GameCreationPageComponent Page de création de partie
/${AppRoutes.Edition} EditionPageComponent Page d'édition de jeu
/${AppRoutes.Admin} AdminPageComponent Page d'administration des jeux
/${AppRoutes.CharacterCreation} CharacterCreationPageComponent Page de création de personnage
/${AppRoutes.WaitingRoom} WaitingRoomPageComponent Salle d'attente
/${AppRoutes.GameView} GameViewPageComponent Vue du jeu en cours
/${AppRoutes.Stats} StatsPageComponent Page des statistiques
** (toute autre route) MainPageComponent Redirection vers la page d'accueil

Providers

Main (Backend)

Le fichier index.ts est le point d'entrée du serveur, initialisant l'application et les services.

Processus d'initialisation

  1. Importation de 'reflect-metadata' et 'module-alias/register'
  2. Récupération de l'instance du serveur via l'injection de dépendances avec TypeDI
  3. Initialisation du serveur
  4. Récupération et initialisation du SocketService

Services essentiels

DatabaseService

Service responsable de la communication avec la base de données MongoDB.

Propriétés

Propriété Type Description
dbClient MongoClient Client MongoDB
dbName string Nom de la base de données
gamesCollection Collection Collection des jeux

Méthodes

constructor(dbClient: MongoClient, dbName: string)

Description : Initialise le service avec le client et le nom de la base de données.
Paramètres :

async insertGame(game: Game)

Description : Insère un nouveau jeu dans la base de données.
Paramètres : game - Jeu à insérer.
Retour : Promise<void>

async updateGame(game: Game, id: string)

Description : Met à jour un jeu existant.
Paramètres :

Retour : Promise<void>
Détails : Exclut le champ _id du jeu avant la mise à jour.

async isGameNameInDB(name: string)

Description : Vérifie si un jeu avec le nom spécifié existe dans la base de données.
Paramètres : name - Nom du jeu.
Retour : Promise<boolean> - Vrai si le jeu existe.

async isGameIdInDB(id: string)

Description : Vérifie si un jeu avec l'identifiant spécifié existe dans la base de données.
Paramètres : id - Identifiant du jeu.
Retour : Promise<boolean> - Vrai si le jeu existe.

async getGame(name: string)

Description : Récupère un jeu par son nom.
Paramètres : name - Nom du jeu.
Retour : Promise<Game> - Le jeu correspondant.

async getGameById(id: string)

Description : Récupère un jeu par son identifiant.
Paramètres : id - Identifiant du jeu.
Retour : Promise<Game> - Le jeu correspondant.

async getGamesList()

Description : Récupère tous les jeux.
Retour : Promise<Game[]> - Liste de tous les jeux.

async deleteGame(name: string)

Description : Supprime un jeu par son nom.
Paramètres : name - Nom du jeu.
Retour : Promise<void>

async changeVisibility(name: string)

Description : Inverse la visibilité d'un jeu.
Paramètres : name - Nom du jeu.
Retour : Promise<void>
Détails : Récupère l'état actuel de visibilité et l'inverse.

GameVerifierService

Service responsable de la vérification de la validité des jeux avant sauvegarde.

Propriétés

Propriété Type Description
databaseService DatabaseService Service d'accès à la base de données

Méthodes

constructor(databaseService: DatabaseService)

Description : Initialise le service avec le service de base de données.
Paramètres : databaseService - Service de base de données.

async isGameValid(game: Game, id: string)

Description : Vérifie si un jeu est valide.
Paramètres :

Retour : Promise<string[]> - Liste des raisons d'invalidité.
Détails : Vérifie plusieurs aspects comme le nom, la description, les portes, etc.

La classe contient également de nombreuses méthodes de vérification spécifiques:

SocketService

Service gérant la communication en temps réel via Socket.IO.

Propriétés

Propriété Type Description
socket Socket Instance du socket
currentGameSubject BehaviorSubject<OnGoingGame> Subject contenant le jeu en cours
currentPlayerSubject BehaviorSubject<Player> Subject contenant le joueur courant

Méthodes

constructor(server: Server, onGoingGameService: OnGoingGameService, waitingSocketService: WaitingSocketService, joinRoomService: JoinGameService, timerService: TimerSocketService, combatService: CombatSocketService, chatService: ChatService)

Description : Initialise le service avec les dépendances nécessaires.

sendToRoom(nip: string, dir: string, data?: unknown)

Description : Envoie des données à une salle spécifique.
Paramètres :

Retour : void

getIO()

Description : Récupère l'instance du serveur Socket.IO.
Retour : SocketIOServer - Instance du serveur Socket.IO.

private init()

Description : Initialise les écouteurs d'événements Socket.IO.
Retour : void
Détails : Configure l'événement de connexion.

private activateNewSocket(socket: Socket)

Description : Configure un nouveau socket avec tous les gestionnaires.
Paramètres : socket - Socket à configurer.
Retour : void
Détails : Active les différents gestionnaires pour les différentes fonctionnalités.

Fournisseurs de services

ServiceProviders

La fonction utilityServicesProvider crée un fournisseur pour les services utilitaires utilisés dans l'application.

Services fournis

Service Description
GameSocketHandlerService Service de gestion des événements socket pour le jeu
GameUtilityService Service utilitaire pour le jeu

Communication avec le serveur

API REST

Le serveur expose une API REST via le GameManagerController:

Méthode Route Description
POST /game-manager/verify Vérifie la validité d'un jeu
PUT /game-manager/ Crée ou met à jour un jeu
GET /game-manager/ Récupère tous les jeux
GET /game-manager/:name Récupère un jeu par son nom
DELETE /game-manager/:name Supprime un jeu
GET /game-manager/visibility/:name Vérifie la visibilité d'un jeu
PATCH /game-manager/visibility/:name Change la visibilité d'un jeu

Le serveur utilise Socket.IO pour la communication en temps réel, gérée par plusieurs services:

Animations et transitions

L'application utilise le système d'animations d'Angular pour les transitions entre les routes via l'animation slideInAnimation configurée dans AppComponent.

Types d'animations

Structuration et organisation du code

Structure modulaire

L'application est organisée en modules logiques:

  1. Pages : Composants de niveau supérieur pour chaque route principale
  2. Composants : Éléments réutilisables utilisés dans les pages
  3. Services : Logique métier et communication avec le serveur
  4. Classes : Modèles de données et entités du domaine
  5. Interfaces : Définitions de types partagés
  6. Constantes : Valeurs partagées dans toute l'application

Dépendances externes

L'application utilise plusieurs bibliothèques externes:

Sécurité et gestion des erreurs

Gestion des erreurs

Le serveur gère différentes erreurs potentielles:

Codes de statut HTTP

Les réponses de l'API utilisent les codes de statut HTTP appropriés:

Environnement de développement

Variables d'environnement

L'application utilise des variables d'environnement pour configurer différents aspects:

Modes de fonctionnement