Aller au contenu principal

Événements (@SubscribeMessage)

Pour réagir quand un client t'envoie quelque chose, utilise @SubscribeMessage.

Le Pattern Request-Response

C'est le moyen le plus simple. Tu reçois un message, tu retournes une valeur. Le framework renvoie automatiquement cette valeur au client sur le même événement.

import { SubscribeMessage } from 'my-fastify-decorators';
import { Socket } from 'socket.io';

@WebSocketGateway()
export class GameGateway {

@SubscribeMessage('ping')
handlePing(socket: Socket, payload: any) {
console.log(`Ping reçu de ${socket.id}`);
return 'pong'; // Le client recevra 'pong' sur l'événement 'ping'
}
}

Émission Manuelle

Parfois, tu veux diffuser un message à tout le monde (Broadcast) ou émettre sur un événement différent. Dans ce cas, utilise l'objet socket directement et ne retourne rien (ou void).

@SubscribeMessage('chat_message')
handleChat(socket: Socket, msg: string) {
// Diffuser à tout le monde SAUF l'expéditeur
socket.broadcast.emit('new_message', msg);

// Diffuser à tout le monde INCLUANT l'expéditeur (via le serveur io)
// Note: Pour faire ça proprement, on injecterait l'instance serveur,
// mais ici socket.emit suffit pour répondre.
}

Paramètres de la méthode

La méthode décorée reçoit toujours deux arguments dans cet ordre :

  1. socket : L'instance Socket du client.
  2. payload : Les données envoyées par le client.