events.gateway.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { Logger } from '@nestjs/common';
  2. import {
  3. ConnectedSocket,
  4. MessageBody,
  5. OnGatewayConnection,
  6. OnGatewayDisconnect,
  7. SubscribeMessage,
  8. WebSocketGateway,
  9. WebSocketServer,
  10. } from '@nestjs/websockets';
  11. import { Server, Socket } from 'socket.io';
  12. @WebSocketGateway({
  13. cors: {
  14. origin: '*',
  15. },
  16. })
  17. export class EventsGateway implements OnGatewayConnection, OnGatewayDisconnect {
  18. @WebSocketServer()
  19. server: Server;
  20. private logger: Logger = new Logger('EventsGateway');
  21. handleConnection(client: Socket, ...args: any[]) {
  22. this.logger.log(`Client connected: ${client.id}`);
  23. }
  24. handleDisconnect(client: Socket) {
  25. this.logger.log(`Client disconnected: ${client.id}`);
  26. }
  27. @SubscribeMessage('join')
  28. handleJoin(
  29. @MessageBody() data: { room: string },
  30. @ConnectedSocket() client: Socket,
  31. ) {
  32. client.join(data.room);
  33. this.logger.log(`Client ${client.id} joined room: ${data.room}`);
  34. return { event: 'joined', data: { room: data.room } };
  35. }
  36. @SubscribeMessage('leave')
  37. handleLeave(
  38. @MessageBody() data: { room: string },
  39. @ConnectedSocket() client: Socket,
  40. ) {
  41. client.leave(data.room);
  42. this.logger.log(`Client ${client.id} left room: ${data.room}`);
  43. return { event: 'left', data: { room: data.room } };
  44. }
  45. // Broadcast methods for different events
  46. emitTaskUpdate(taskData: any) {
  47. this.server.emit('taskUpdate', taskData);
  48. }
  49. emitSettingsUpdate(settingsData: any) {
  50. this.server.emit('settingsUpdate', settingsData);
  51. }
  52. emitFileUpdate(fileData: any) {
  53. this.server.emit('fileUpdate', fileData);
  54. }
  55. emitMaintenanceUpdate(maintenanceData: any) {
  56. this.server.emit('maintenanceUpdate', maintenanceData);
  57. }
  58. emitWatcherUpdate(watcherData: any) {
  59. this.server.emit('watcherUpdate', watcherData);
  60. }
  61. emitToRoom(room: string, event: string, data: any) {
  62. this.server.to(room).emit(event, data);
  63. }
  64. }