Merge pull request #167 from AngelRionCervi/remove-gatherer-timeout

kick after delay when afk
This commit is contained in:
Absurdon 2020-07-28 19:08:51 +02:00 committed by GitHub
commit 3a2abd76c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 68 additions and 27 deletions

View File

@ -28,6 +28,8 @@ npm install # Install deps
npm run watch # Compile and watch frontend assets npm run watch # Compile and watch frontend assets
RANDOM_USER=true npm run dev # Run dev server, loading yourself as a random user RANDOM_USER=true npm run dev # Run dev server, loading yourself as a random user
# or
Fixed_USER=989 npm run dev # Run dev server, loading yourself as any user with the specified id
``` ```
## Run in production ## Run in production

View File

@ -933,7 +933,6 @@ const GathererListItem = React.createClass({
let idleStatus; let idleStatus;
if (!gatherer.user.online) { if (!gatherer.user.online) {
const mins = lastSeenInMinutes(gatherer); const mins = lastSeenInMinutes(gatherer);
if (mins > 60) { if (mins > 60) {
const hours = Math.round(mins / 6) / 10; const hours = Math.round(mins / 6) / 10;
idleStatus = [ idleStatus = [

View File

@ -23,10 +23,23 @@ var assignRandomUser = (socket, next) => {
}); });
}; };
var assignFixedUser = (socket, next, userId) => {
usersHelper.getFixedUser(userId, function (error, user) {
if (error) {
winston.error(error);
return next(new Error("Authentication Failed"))
}
socket._user = user;
return next();
});
};
var handleFailedAuth = (socket, next) => { var handleFailedAuth = (socket, next) => {
if (process.env.RANDOM_USER) { if (process.env.RANDOM_USER) {
return assignRandomUser(socket, next); return assignRandomUser(socket, next);
} else { } else if (process.env.FIXED_USER) {
return assignFixedUser(socket, next, process.env.FIXED_USER);
} else {
return next(new Error("Authentication Failed")); return next(new Error("Authentication Failed"));
} }
}; };

View File

@ -25,6 +25,7 @@ const ArchivedGather = mongoose.model("ArchivedGather");
const Event = mongoose.model("Event"); const Event = mongoose.model("Event");
const _ = require("lodash"); const _ = require("lodash");
const winston = require("winston"); const winston = require("winston");
const kickTimeout = 300 // sec
module.exports = function (namespace) { module.exports = function (namespace) {
const emitGather = (socket, gather) => { const emitGather = (socket, gather) => {
@ -33,7 +34,40 @@ module.exports = function (namespace) {
type: gather ? gather.type : null, type: gather ? gather.type : null,
maps: Map.list, maps: Map.list,
}); });
}; };
const removeGatherer = (gather, user) => {
let gatherLeaver = gather.getGatherer(user);
if (!gatherLeaver) {
winston.info(`${user.username} ${user.id} attempted to leave ${gather.type} gather, but was not in gather.`);
return;
}
if (gather.can("removeGatherer")) {
gather.removeGatherer(user);
}
if (user.cooldown) gather.applyCooldown(user);
Event.leaver(gatherLeaver.user);
refreshGather(gather.type);
}
const removeAfkGathererTimer = (gather, user) => {
const interval = setInterval(() => {
if (gather.getGatherer(user).user.online) {
clearInterval(interval);
}
const now = Date.now();
const awayDuration = (now / 1000) - (user.lastSeen / 1000);
if (awayDuration >= kickTimeout) {
console.log("kicked from being afk : ");
removeGatherer(gather, user);
clearInterval(interval);
}
}, 1000)
}
const refreshArchive = () => { const refreshArchive = () => {
ArchivedGather.recent((error, recentGathers) => { ArchivedGather.recent((error, recentGathers) => {
@ -72,12 +106,14 @@ module.exports = function (namespace) {
if (gatherer.user.id == userId && gatherer.user.online) { if (gatherer.user.id == userId && gatherer.user.online) {
gatherer.user.online = false; gatherer.user.online = false;
gatherer.user.lastSeen = Date.now(); gatherer.user.lastSeen = Date.now();
removeAfkGathererTimer(gatherManager.current, { ...gatherer.user, cooldown: false });
refreshGather(type); refreshGather(type);
} }
} }
}); });
}; };
const gatherRefreshers = {}; // Stores debounced procedures to refresh gathers const gatherRefreshers = {}; // Stores debounced procedures to refresh gathers
@ -180,22 +216,7 @@ module.exports = function (namespace) {
emitGather(socket, gatherManager.current) emitGather(socket, gatherManager.current)
}); });
const removeGatherer = (gather, user) => {
let gatherLeaver = gather.getGatherer(user);
if (!gatherLeaver) {
winston.info(`${user.username} ${user.id} attempted to leave ${gather.type} gather, but was not in gather.`);
return;
}
if (gather.can("removeGatherer")) {
gather.removeGatherer(user);
}
if (user.cooldown) gather.applyCooldown(user);
Event.leaver(gatherLeaver.user);
refreshGather(gather.type);
}
socket.on("gather:leave", function (data) { socket.on("gather:leave", function (data) {
if (!data) data = {}; if (!data) data = {};

View File

@ -1,11 +1,16 @@
"use strict"; "use strict";
var User = require("../user/user"); const User = require("../user/user");
var client = require("../ensl/client")();
var async = require("async");
var getRandomUser = callback => { const getRandomUser = callback => {
let id = Math.floor(Math.random() * 5000) + 1; const id = Math.floor(Math.random() * 5000) + 1;
User.find(id, function (error, user) {
if (error) return getRandomUser(callback);
return callback(error, user);
})
};
const getFixedUser = (id, callback) => {
User.find(id, function (error, user) { User.find(id, function (error, user) {
if (error) return getRandomUser(callback); if (error) return getRandomUser(callback);
return callback(error, user); return callback(error, user);
@ -13,7 +18,8 @@ var getRandomUser = callback => {
}; };
module.exports = { module.exports = {
getRandomUser: getRandomUser getRandomUser,
getFixedUser
}; };