feat: add content room subscription and messaging support
- Added `join_content` and `leave_content` WebSocket events for subscribing and unsubscribing to content rooms. - Implemented `sendToContent` utility method for broadcasting messages to specific content rooms. - Enhanced connection handling with logging and session validation updates.
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import { Logger } from "@nestjs/common";
|
||||
import { ConfigService } from "@nestjs/config";
|
||||
import {
|
||||
ConnectedSocket,
|
||||
MessageBody,
|
||||
OnGatewayConnection,
|
||||
OnGatewayDisconnect,
|
||||
OnGatewayInit,
|
||||
SubscribeMessage,
|
||||
WebSocketGateway,
|
||||
WebSocketServer,
|
||||
} from "@nestjs/websockets";
|
||||
@@ -54,6 +57,8 @@ export class EventsGateway
|
||||
|
||||
if (!session.accessToken) {
|
||||
this.logger.warn(`Client ${client.id} unauthorized connection`);
|
||||
// Permettre les connexions anonymes pour voir les commentaires en temps réel ?
|
||||
// Pour l'instant on déconnecte car le système actuel semble exiger l'auth
|
||||
client.disconnect();
|
||||
return;
|
||||
}
|
||||
@@ -75,8 +80,30 @@ export class EventsGateway
|
||||
this.logger.log(`Client disconnected: ${client.id}`);
|
||||
}
|
||||
|
||||
@SubscribeMessage("join_content")
|
||||
handleJoinContent(
|
||||
@ConnectedSocket() client: Socket,
|
||||
@MessageBody() contentId: string,
|
||||
) {
|
||||
client.join(`content:${contentId}`);
|
||||
this.logger.log(`Client ${client.id} joined content room: ${contentId}`);
|
||||
}
|
||||
|
||||
@SubscribeMessage("leave_content")
|
||||
handleLeaveContent(
|
||||
@ConnectedSocket() client: Socket,
|
||||
@MessageBody() contentId: string,
|
||||
) {
|
||||
client.leave(`content:${contentId}`);
|
||||
this.logger.log(`Client ${client.id} left content room: ${contentId}`);
|
||||
}
|
||||
|
||||
// Méthode utilitaire pour envoyer des messages à un utilisateur spécifique
|
||||
sendToUser(userId: string, event: string, data: any) {
|
||||
this.server.to(`user:${userId}`).emit(event, data);
|
||||
}
|
||||
|
||||
sendToContent(contentId: string, event: string, data: any) {
|
||||
this.server.to(`content:${contentId}`).emit(event, data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user