-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
103 lines (89 loc) · 3.14 KB
/
index.js
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const mongoose = require('mongoose');
const WebSocket = require('ws');
const app = require('./app');
const config = require('./config/config');
const logger = require('./config/logger');
let server;
mongoose.connect(config.mongoose.url, config.mongoose.options).then(() => {
logger.info('Connected to MongoDB');
server = app.listen(config.port, () => {
logger.info(`Listening to port ${config.port}`);
});
// WebSocket server setup
const wss = new WebSocket.Server({ host: '0.0.0.0', port: 5001 });
logger.info('WebSocket server is listening on port 5001');
// Store clients with their associated rasID
const clients = new Map();
wss.on('connection', (ws) => {
logger.info('New WebSocket connection');
ws.on('message', (message) => {
try {
const parsedMessage = JSON.parse(message);
logger.info(`Received message: ${JSON.stringify(parsedMessage)}`);
if (parsedMessage.rasID) {
// Store the rasID with the client
// clients.set(ws, parsedMessage.rasID);
// logger.info(`Stored rasID ${parsedMessage.rasID} for client`);
if (!clients.has(ws)) {
clients.set(ws, parsedMessage.rasID);
logger.info(`Stored rasID ${parsedMessage.rasID} for client`);
}
}
if (parsedMessage.ID) {
// check if not have ID before set
if (!clients.has(ws)) {
clients.set(ws, parsedMessage.ID);
}
// Forward the message to the client with the matching rasID
}
// clients.forEach((rasID, client) => {
// if (rasID === parsedMessage.ID && client.readyState === WebSocket.OPEN && client !== ws) {
// client.send(JSON.stringify(parsedMessage));
// logger.info(`Forwarded message to client with rasID ${rasID}`);
// }
// });
// send for client have same ID == rasID
clients.forEach((rasID, client) => {
if (rasID === parsedMessage.ID && client.readyState === WebSocket.OPEN && client !== ws) {
client.send(JSON.stringify(parsedMessage));
logger.info(`Forwarded message to client with rasID ${rasID}`);
}
});
clients.forEach((ID, client) => {
if (ID === parsedMessage.rasID && client.readyState === WebSocket.OPEN && client !== ws) {
client.send(JSON.stringify(parsedMessage));
logger.info(`Forwarded message to client with ID ${ID}`);
}
});
} catch (e) {
logger.error('Failed to parse message', e);
}
});
ws.on('close', () => {
logger.info('WebSocket connection closed');
clients.delete(ws);
});
});
});
const exitHandler = () => {
if (server) {
server.close(() => {
logger.info('Server closed');
process.exit(1);
});
} else {
process.exit(1);
}
};
const unexpectedErrorHandler = (error) => {
logger.error(error);
exitHandler();
};
process.on('uncaughtException', unexpectedErrorHandler);
process.on('unhandledRejection', unexpectedErrorHandler);
process.on('SIGTERM', () => {
logger.info('SIGTERM received');
if (server) {
server.close();
}
});