I
Size: a a a
I
A
TS
TS
TS
Ц
NK
M
R
TS
r
V
R
async function pingUserConnection(container, user, ws) {
const { id: sessId } = await container.resolve('wsSessionParser').parse(ws);
const db = container.resolve('db');
let lastPingTime = new Date();
let lastPongTime = new Date();
updateUserStatus(user.id, sessId, true, false, container);
const stopPing = () => {
clearInterval(intervalId);
updateUserStatus(user.id, sessId, false, false, container);
}
const intervalId = setInterval(() => {
const shouldMarkOffline = differenceInMinutes(lastPongTime, lastPingTime) > 2;
if (shouldMarkOffline) {
stopPing();
ws.close();
return
}
if (ws.readyState === 1) {
ws.ping();
lastPingTime = new Date();
} else {
stopPing();
}
}, ONE_MINUTE_IN_MILLIS * 2);
ws.on('pong', async () => {
lastPongTime = new Date();
const actualUser = await db.models.user.findByPk(user.id)
updateUserStatus(user.id, sessId, actualUser.isOnline, actualUser.isSleep, container);
});
ws.on('close', () => {
stopPing();
ws.close();
});
}
R
TS
R
R
A