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 { Logger } from "@nestjs/common";
|
||||||
import { ConfigService } from "@nestjs/config";
|
import { ConfigService } from "@nestjs/config";
|
||||||
import {
|
import {
|
||||||
|
ConnectedSocket,
|
||||||
|
MessageBody,
|
||||||
OnGatewayConnection,
|
OnGatewayConnection,
|
||||||
OnGatewayDisconnect,
|
OnGatewayDisconnect,
|
||||||
OnGatewayInit,
|
OnGatewayInit,
|
||||||
|
SubscribeMessage,
|
||||||
WebSocketGateway,
|
WebSocketGateway,
|
||||||
WebSocketServer,
|
WebSocketServer,
|
||||||
} from "@nestjs/websockets";
|
} from "@nestjs/websockets";
|
||||||
@@ -54,6 +57,8 @@ export class EventsGateway
|
|||||||
|
|
||||||
if (!session.accessToken) {
|
if (!session.accessToken) {
|
||||||
this.logger.warn(`Client ${client.id} unauthorized connection`);
|
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();
|
client.disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -75,8 +80,30 @@ export class EventsGateway
|
|||||||
this.logger.log(`Client disconnected: ${client.id}`);
|
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
|
// Méthode utilitaire pour envoyer des messages à un utilisateur spécifique
|
||||||
sendToUser(userId: string, event: string, data: any) {
|
sendToUser(userId: string, event: string, data: any) {
|
||||||
this.server.to(`user:${userId}`).emit(event, data);
|
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