É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 :
- socket : L'instance
Socketdu client. - payload : Les données envoyées par le client.