/
events.gateway.ts
72 lines (64 loc) · 1.92 KB
/
events.gateway.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import {
ConnectedSocket,
MessageBody,
OnGatewayConnection,
OnGatewayDisconnect,
OnGatewayInit,
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { Logger } from '@nestjs/common';
@WebSocketGateway()
export class EventsGateway
implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect
{
private readonly logger = new Logger(EventsGateway.name);
@WebSocketServer() public server: Server;
onlineMap = {};
afterInit() {
this.logger.debug('init');
}
handleConnection(@ConnectedSocket() socket: Socket) {
this.logger.debug(
`client(${socket.id}) connected on namespace(${socket.nsp.name})`,
);
if (!this.onlineMap[socket.nsp.name]) {
this.onlineMap[socket.nsp.name] = {};
}
this.onlineMap[socket.nsp.name][socket.id] = '';
this.server.emit(
'onlineList',
Object.values(this.onlineMap[socket.nsp.name]),
);
}
handleDisconnect(@ConnectedSocket() socket: Socket) {
this.logger.debug(
`client(${socket.id}) disconnected on namespace(${socket.nsp.name})`,
);
delete this.onlineMap[socket.nsp.name][socket.id];
this.server.emit(
'onlineList',
Object.values(this.onlineMap[socket.nsp.name]),
);
}
@SubscribeMessage('login')
handleLogin(@MessageBody() data, @ConnectedSocket() socket: Socket) {
const newNamespace = socket.nsp;
this.logger.debug(`login, ${socket.nsp.name}`);
this.onlineMap[socket.nsp.name][socket.id] = data;
newNamespace.emit(
'onlineList',
Object.values(this.onlineMap[socket.nsp.name]),
);
const channel = 'all';
this.logger.debug(`join, ${socket.nsp.name}, ${channel}`);
socket.join(`${socket.nsp.name}-${channel}`);
}
@SubscribeMessage('chat')
async onChat(@MessageBody() message: string) {
this.logger.debug(message);
this.server.emit('chat', message);
}
}