user connected comprovation system implemented
nau idoctnef@openmailbox.org
Sat, 10 Sep 2016 14:12:45 +0200
5 files changed,
95 insertions(+),
10 deletions(-)
M
controllers/userController.js
→
controllers/userController.js
@@ -53,12 +53,33 @@ } else if (user) {
// return the information including token as JSON //res.jsonp(user); user.password=""; - console.log(user); + //console.log(user); res.status(200).jsonp(user[0]); } + }); +}; +exports.findLoggedUserByUsername = function(req, res) { + userModel.find({ + username: req.params.username + }, function(err, user) { + if (err) throw err; + if (!user) { + res.json({ success: false, message: 'no user found' }); + } else if (user) { + //console.log(user[0]); + //res.status(200).jsonp(user[0]); + user[0].connected= true; + user[0].lastConnection= new Date(); //adds the last connection time + user[0].save(function(err) { + if(err) return res.send(500, err.message); + + user[0].password=""; + res.status(200).jsonp(user[0]); + }); + } }); };
A
intervalComprovations.js
@@ -0,0 +1,45 @@
+ +var mongoose = require('mongoose'); +var moment = require('moment'); +var projectModel = mongoose.model('projectModel'); + +var userModel = mongoose.model('userModel'); + + +exports.lastConnectionUser = function() { + var lastIntervalDate = new Date(); + var intervalObject = setInterval(function () { + var actualDate= new Date(); + //console.log(actualDate); + lastIntervalDate.setMinutes(lastIntervalDate.getMinutes() - 4); + console.log(lastIntervalDate); + + userModel.find(function(err, users) { + if(err) res.send(500, err.message); + + + for(var i=0; i<users.length; i++) + { + if(users[i].connected==true) + { + if(users[i].lastConnection<=lastIntervalDate.setMinutes(lastIntervalDate.getMinutes() - 4)) + { + if(users[i].connected==true) + { + console.log("user disconnected: " + users[i].username); + users[i].connected= false; + users[i].save(function(err) { + if(err) return res.send(500, err.message); + //console.log("user: " + users[i].username + ", connected=false"); + }); + } + } + } + } + + }); + + + lastIntervalDate= new Date(); + }, 60000);//every minute +};
M
models/userModel.js
→
models/userModel.js
@@ -12,6 +12,7 @@ github: { type: String },
web: { type: String }, projects: { type: String }, connected: { type: Boolean }, - working: { type: Boolean } + working: { type: Boolean }, + lastConnection: { type: Date } }) module.exports = mongoose.model('userModel', userSchema);
M
server.js
→
server.js
@@ -32,6 +32,10 @@
var projectMdl = require('./models/projectModel')(app, mongoose); var projectCtrl = require('./controllers/projectController'); + +var intervalComprovations = require('./intervalComprovations'); +intervalComprovations.lastConnectionUser(); + /*// Example Route var router = express.Router(); router.get('/', function(req, res) {@@ -100,8 +104,8 @@
apiRoutes.route('/users/:id') .get(userCtrl.findById); -apiRoutes.route('/users/byusername/:username') - .get(userCtrl.findUserByUsername); +apiRoutes.route('/users/loggeduser/:username') + .get(userCtrl.findLoggedUserByUsername); apiRoutes.route('/projects/user/:username') .get(projectCtrl.findAllProjectsFromUsername);
M
webapp/controllers.js
→
webapp/controllers.js
@@ -10,18 +10,30 @@ ) {
$scope.users={}; $scope.projects={}; $scope.currentInclude='login.html'; - var refreshTime=20000; + var refreshTime=10000;//every 10 seconds + + var errorsGettingData=0; + $scope.serverNotResponding = function(){ + console.log("server not responding, data error"); + toastr.error("server not responding"); + $scope.$broadcast('scroll.refreshComplete');//refresher stop + errorsGettingData++; + console.log("errorsGettingData: " + errorsGettingData); + if(errorsGettingData>3) + { + $interval.cancel(intervalGetData); + $scope.currentInclude="login.html"; + } + }; $scope.getLoggedUser = function(){ //get logged user - $http.get(urlapi + 'users/byusername/' + $scope.user.username) + $http.get(urlapi + 'users/loggeduser/' + $scope.user.username) .success(function(data, status, headers,config){ console.log(data); $scope.user=data; }) .error(function(data, status, headers,config){ - console.log("server not responding, data error"); - toastr.error("server not responding"); - $scope.$broadcast('scroll.refreshComplete');//refresher stop + $scope.serverNotResponding(); }) .then(function(result){ users = result.data;@@ -37,10 +49,12 @@ }
if(localStorage.getItem("owt_user")){ $scope.user=JSON.parse(localStorage.getItem("owt_user")); }else{ - $scope.currentInclude="login.html"; + + $scope.serverNotResponding(); } $scope.getLoggedUser(); + //getting users $http.get(urlapi + 'users') .success(function(data, status, headers,config){