auto delete on inactivity

This commit is contained in:
Baipyrus 2023-02-02 09:16:41 +01:00
parent 6809200911
commit d153ad5df8

View File

@ -34,6 +34,18 @@ function generatePartialID() {
return Math.floor(Math.random()*10000).toString().padStart(4, '0');
}
// Check for user inactivity and delete accordingly
function userInactivity(name, id) {
for (let i = 0; i < users.length; i++)
if (users[i].name === name && users[i].id === id && new Date() - users[i].seen > 86400000) {
if (consoleLogging)
console.log(`Deleting user with ID '${name}#${id}' because of inactivity.`);
users.splice(i, 1);
break;
}
}
// User data
const users = [];
@ -46,8 +58,10 @@ app.post('/connect', (req, res) => {
while (!isStringUnique(name_id, `${name}#${id}`))
id = generatePartialID();
users.push({
socket: req.socket,
date: new Date(),
deletion: setInterval(
()=>userInactivity(name, id),
3600000),
seen: new Date(),
chats: {},
name,
id
@ -95,6 +109,7 @@ app.post('/nickname', (req, res) => {
console.log(`(Re-)named user with ID '${oldName}#${id}'.`);
u.name = name;
u.id = currentID;
u.seen = new Date();
break;
}
@ -106,6 +121,12 @@ app.post('/nickname', (req, res) => {
app.post('/getChat', (req, res) => {
const { name, id } = req.body;
for (const u of users)
if (u.name === name && u.id === id) {
u.seen = new Date();
break;
}
// Go through users' chats, retrieve messages, save by username
let chats = {};
const fullName = `${name}#${id}`;
@ -140,12 +161,13 @@ app.post('/message', (req, res) => {
if (!u.chats[recipient])
u.chats[recipient] = [];
u.chats[recipient].push(message);
u.seen = new Date();
break;
}
// Log message for debugging
if (consoleLogging)
console.log(`User '${name}#${id}' sent message '${message}'.`);
console.log(`User with ID '${name}#${id}' sent message '${message}'.`);
// Confirm process
res.status(200).send();
@ -154,7 +176,7 @@ app.post('/message', (req, res) => {
// User requesting all names
app.get('/getNames', (req, res) => {
if (consoleLogging)
console.log('Some user requested all names.');
console.log('Some user requested all usernames + IDs.');
res.status(200).json(users.map(u => {
return {
@ -164,6 +186,39 @@ app.get('/getNames', (req, res) => {
}));
});
// User sends activity notification
app.post('/activity', (req, res) => {
const { name, id } = req.body;
if (consoleLogging)
console.log(`User with ID '${name}#${id}' is online.`);
for (const u of users)
if (u.name === name && u.id === id) {
u.seen = new Date();
break;
}
res.status(200).send();
});
app.post('/login', (req, res) => {
const { name, id } = req.body;
if (consoleLogging)
console.log(`Some user requested existence of '${name}#${id}'.`);
let success = false;
for (const u of users)
if (u.name === name && u.id === id) {
success = true;
u.seen = new Date();
break;
}
res.status(200).json({success});
})
// Internal server error
server.on('error', err => {
console.error('Internal server error', err);