Battleship_Server/src/sala-chat/sala-chat.gateway.ts
2024-04-05 13:51:24 +02:00

96 lines
2.8 KiB
TypeScript

import {
OnGatewayConnection,
OnGatewayDisconnect,
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { SalaChatService } from './sala-chat.service';
import { Server, Socket } from 'socket.io';
@WebSocketGateway({ namespace: 'salachat' })
export class SalaChatGateway
implements OnGatewayConnection, OnGatewayDisconnect
{
@WebSocketServer()
server: Server;
constructor(private readonly salaChatService: SalaChatService) {}
handleConnection(client: Socket) {
const userId = client.handshake.auth.userId;
const userConectado = this.salaChatService.conectaUsuarioUUID(
userId,
client.id,
);
if (userConectado) {
client.join('chat_general');
client.emit('onConnectRoom', {
usuarios: this.salaChatService.listaUsuarios,
partidas: this.salaChatService.partidasAbiertas,
partidasEnCurso: '',
});
client.broadcast
.to('chat_general')
.emit('onUserChangeStatus', userConectado);
} else {
client.disconnect();
}
}
handleDisconnect(client: Socket) {
const userId = client.handshake.auth.userId;
const userDesconectado = this.salaChatService.desconectaUsuarioUUID(userId);
if (userDesconectado) {
client.broadcast
.to('chat_general')
.emit('onUserChangeStatus', userDesconectado);
}
client.leave('chat_general');
}
@SubscribeMessage('msgChat')
handleMsg(client: Socket, msg: string) {
const userId = client.handshake.auth.userId;
const user = this.salaChatService.getUsuarioUUID(userId);
client.broadcast
.to('chat_general')
.emit('onMsgChat', { uuid: userId, msg });
return { uuid: userId, msg };
}
sendBroadcastMsg(msg: string) {
this.server.to('chat_general').emit('broadcastMsg', msg);
}
@SubscribeMessage('createPartida')
handleCreatePartida(client: Socket) {
const userId = client.handshake.auth.userId;
const partida = this.salaChatService.creaPartida(userId);
client.broadcast.to('chat_general').emit('onCreatePartida', partida);
return partida;
}
@SubscribeMessage('cancelPartida')
handleCancelPartida(client: Socket, uuidPartida: string) {
const userId = client.handshake.auth.userId;
const uuidPartidaEliminado = this.salaChatService.eliminarPartida(
userId,
uuidPartida,
);
if (uuidPartidaEliminado)
client.broadcast
.to('chat_general')
.emit('onCancelPartida', uuidPartidaEliminado);
return uuidPartidaEliminado;
}
@SubscribeMessage('joinPartida')
handleJoinPartida(client: Socket, uuidPartida: string) {
const userId = client.handshake.auth.userId;
const partida = this.salaChatService.unirsePartida(userId, uuidPartida);
client.broadcast.to('chat_general').emit('onJoinPartida', partida.uuid);
return partida.uuid;
}
}