Gestion des WebSockets

Cette section détaille les composants qui gèrent les communications en temps réel via WebSockets. Ces services sont essentiels pour maintenir la connexion entre le client et le serveur, ainsi que pour synchroniser l'état du jeu entre tous les participants.

Événements Socket principaux

Les événements Socket.IO sont définis dans SocketIOEvents (commun client/serveur) et incluent:

Points d'attention

  1. Le SocketService sert de façade pour tous les autres services spécialisés
  2. Chaque service spécialisé gère un aspect spécifique (jeu, salle d'attente, rejoindre une partie)
  3. L'approche est modulaire, permettant d'étendre facilement le système
  4. Les services utilisent intensivement le pattern Observer via les événements Socket.IO

Cette architecture permet une synchronisation en temps réel efficace entre tous les clients tout en maintenant une séparation des préoccupations claire.

SocketService (socket.service.ts)

Service central qui gère les connexions Socket.IO et coordonne tous les gestionnaires de sockets spécifiques.

Méthodes

constructor(server: Server, onGoingGameService: OnGoingGameService, waitingSocketService: WaitingSocketService, joinRoomService: JoinGameService, timerService: TimerSocketService, combatService: CombatSocketService, chatService: ChatService)
sendToRoom(nip: string, dir: string, data?: unknown)
getIO(): SocketIOServer
private init(): void
private activateNewSocket(socket: Socket)

GameSocketHandlerService

Service (game-socket.handler.service.ts) qui gère les événements socket liés au jeu principal.

Méthodes

initialize(service: IOnGoingGameService): void
handleSocket(socket: Socket): void
handleGame(socket: Socket): void
private handlePlayerMovement(socket: Socket): void
private handleTeleportPlayer(socket: Socket): void
private handleDoorAction(socket: Socket): void
private handlePlayerActions(socket: Socket): void
private checkInventoryFull(player: Player, cell: Cell, game: OnGoingGame): boolean
Autres méthodes privées utilitaires

Ces méthodes sont des utilitaires pour la gestion des déplacements et des interactions avec les objets.

WaitingSocketService

Service (waiting-room-socket.service.ts) qui gère les événements socket de la salle d'attente.

Méthodes

constructor(private onGoingGameService: OnGoingGameService)
handleSocket(socket: Socket): void
private handlePlayerLeave(socket: Socket, isDisconnected: boolean)
private cancelGame(nip: string, isDisconnected: boolean)
private chooseVirtualPlayerName(socket: Socket): string
private chooseVirtualPlayerAvatar(socket: Socket): string
private createVirtualPlayer(socket: Socket, playerType: string): Player | null

JoinGameService

Service (join-game.service.ts) qui gère la logique de rejoindre une partie.

Méthodes

constructor(private onGoingGameService: OnGoingGameService)
handleSocket(socket: Socket): void