drone.gateway.ts
1.89 KB
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
73
74
75
76
77
78
79
80
81
82
83
import {
SubscribeMessage,
WebSocketGateway,
WebSocketServer,
} from '@nestjs/websockets';
import { Server, Socket } from 'ws';
import { DroneService } from './drone.service';
import { DroneLogEntity } from 'src/entities/drone.log.entity';
async function sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
@WebSocketGateway(20206, { path: '/drone' })
export class DroneGateway {
constructor(private readonly droneService: DroneService) {}
@WebSocketServer()
server: Server;
private wsClients = [];
async afterInit() {
let globalCircleStep = 0;
while (1) {
if (globalCircleStep === 3600) {
globalCircleStep = 0;
} else {
globalCircleStep += 1;
}
this.wsClients.forEach((client) => {
const droneTestData = this.droneService.getDroneTestData({
globalCircleStep,
});
client.send(
JSON.stringify(
Object.assign({
data: { droneLog: droneTestData },
statusCode: 200,
}),
),
);
});
await sleep(1000);
}
}
async handleConnection(client: Socket) {
let clientId = this.wsClients.push(client);
}
handleDisconnect(client: Socket) {
let clientIndex = this.wsClients.find((wsClient) => wsClient === client);
if (clientIndex !== -1) {
this.wsClients.splice(clientIndex, 1);
}
}
@SubscribeMessage('')
handleMessages(client: Socket, payload: { name: string; text: string }) {
client.send(
JSON.stringify({
number: 10,
member: 'tony',
}),
);
}
sendToClientsDroneLogList(droneLogList: Array<DroneLogEntity>) {
this.wsClients.forEach((client) => {
client.send(
JSON.stringify(
Object.assign({
data: { droneLog: droneLogList },
statusCode: 200,
}),
),
);
});
}
}