This repository has been archived by the owner on Jul 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebSocket.js
127 lines (113 loc) · 3.87 KB
/
webSocket.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const { request } = require('./controllers/requestController');
const WebsocketManager = function WebsocketManager(wss, req) {
this.wss = wss;
this.connections = {};
};
/**
* @description Send a websocket message to the user.
* @param {Object} event - Event.
* @example
* sendMessageUser(event);
*/
async function verificationNotification(userId) {
const res = await request("select * from notification where iduser like $1 and show = 1", [userId]);
let message = {};
res.forEach(element => {
message.title = element.title;
message.description = element.description;
message.date = element.date;
this.connections[userId].client.send(JSON.stringify({ id: element.type, message }));
});
await request("update notification set show = 0 where iduser like $1", [userId]);
}
async function sendMessageUser(userId, data) {
if (!this.connections[userId]) {
if (data.type !== 0) {
let number = (await request("select id from notification order by id desc limit 1"))[0];
if (number) number = number.id + 1;
else number = 1;
const date = data.message.date;
await request("insert into notification values($1, $2, $3, $4, $5, $6, $7)", [number, userId, data.message.title, data.message.description, date, 1, data.type]);
}
return 0;
}
this.connections[userId].client.send(JSON.stringify(data));
}
/**
* @description Send a websocket message to all user.
* @param {Object} event - Event.
* @example
* sendMessageAllUsers(event);
*/
async function sendMessageAllUsers(data) {
if (data.type !== 0) {
const user = await request("select id from compte");
let number = (await request("select id from notification order by id desc limit 1"))[0];
if (number) number = number.id + 1;
else number = 1;
const date = data.message.date;
user.forEach(element => {
request("insert into notification values($1, $2, $3, $4, $5, $6, $7)", [number, element.id, data.message.title, data.message.description, date, 1, data.type]);
number++;
});
}
const usersIds = Object.keys(this.connections);
usersIds.forEach((userId) => {
this.connections[userId].client.send(JSON.stringify(data));
request("update notification set show = 0 where iduser like $1", [userId]);
});
}
/**
* @description When a user is connected.
* @param {Object} user - User Object.
* @param {Object} client - Websocket client.
* @example
* userConnected(user, ws);
*/
function userConnected(user, client) {
if (!this.connections[user]) {
this.connections[user] = {};
}
this.connections[user] = { user, client };
this.verificationNotification(user);
return null;
}
/**
* @description When a user is disconnected.
* @param {Object} user - User Object.
* @param {Object} client - Websocket client.
* @example
* userDisconnected(user, ws);
*/
function userDisconnected(user) {
if (!this.connections[user]) {
this.connections[user] = [];
}
delete this.connections[user];
return null;
}
/**
* @description Init websocket server.
* @example
* init();
*/
function init() {
this.wss.on('connection', (ws) => {
ws.on('message', async (id) => {
try {
this.userConnected(id, ws);
} catch (e) {
console.log(e);
ws.close(4000);
}
});
});
return null;
}
WebsocketManager.prototype.init = init;
WebsocketManager.prototype.userConnected = userConnected;
WebsocketManager.prototype.userDisconnected = userDisconnected;
WebsocketManager.prototype.sendMessageUser = sendMessageUser;
WebsocketManager.prototype.sendMessageAllUsers = sendMessageAllUsers;
WebsocketManager.prototype.verificationNotification = verificationNotification;
module.exports = WebsocketManager;