my-chat-room/apps/api/src/app/app.gateway.ts

50 lines
1.4 KiB
TypeScript

import type { Message } from '@chat-room/api-interfaces';
import {
MESSAGE_TO_CLIENT,
MESSAGE_TO_SERVER,
} from '@chat-room/api-interfaces';
import { Logger } from '@nestjs/common';
import {
OnGatewayConnection,
OnGatewayDisconnect,
OnGatewayInit,
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { AppService } from './app.service';
import { Server, Socket } from 'socket.io';
@WebSocketGateway(4001)
export class AppGateway
implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
@WebSocketServer()
wss: Server;
private logger: Logger = new Logger('AppGateway');
constructor(private appService: AppService) {}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
afterInit(server: Server) {
this.logger.log('Initialized...');
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unused-vars
handleConnection(client: Socket, ...args: any[]) {
this.logger.log(`Client connected: ${client.id}`);
client.emit(MESSAGE_TO_CLIENT, this.appService.getMessages());
}
handleDisconnect(client: Socket) {
this.logger.log(`Client disconnected: ${client.id}`);
}
@SubscribeMessage(MESSAGE_TO_SERVER)
handleMessage(client: Socket, payload: Message): void {
this.logger.log(payload);
this.appService.addMessage(payload);
this.wss.emit(MESSAGE_TO_CLIENT, this.appService.getMessages());
}
}