import { OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit, WebSocketGateway, WebSocketServer } from '@nestjs/websockets'; import { Server } from 'socket.io'; import { Logger } from '@nestjs/common'; @WebSocketGateway({ transports: ['websocket'] }) export class SocketService implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect { private logger: Logger = new Logger('SocketService'); @WebSocketServer() server: Server; send(data: any) { if (this.server) { Array.from(this.server.clients).forEach((c: any) => { c.send(JSON.stringify(data)); }); } } get clients(): string[] { if (this.server) { return Array.from(this.server.clients).map((c: any) => c.id); } return []; } afterInit(server: any): any { this.logger.debug('WEBSOCKET INIT'); } handleConnection(client: any, ...args: never[]): any { client.id = Math.random(); this.logger.debug(`${client.id} connected`); } handleDisconnect(client: any): any { this.logger.debug(`${client.id} disconnected`); client.id = null; } }