/** * connection statistics service * record connection, login count and list */ var Service = function(app) { this.serverId = app.getServerId(); this.connCount = 0; this.loginedCount = 0; this.logined = {}; }; module.exports = Service; var pro = Service.prototype; /** * Add logined userstate. * * @param uid {String} userstate id * @param info {Object} record for logined userstate */ pro.addLoginedUser = function(uid, info) { if(!this.logined[uid]) { this.loginedCount++; } info.uid = uid; this.logined[uid] = info; }; /** * Update userstate info. * @param uid {String} userstate id * @param info {Object} info for update. */ pro.updateUserInfo = function(uid, info) { var user = this.logined[uid]; if (!user) { return; } for (var p in info) { if (info.hasOwnProperty(p) && typeof info[p] !== 'function') { user[p] = info[p]; } } }; /** * Increase connection count */ pro.increaseConnectionCount = function() { this.connCount++; }; /** * Remote logined userstate * * @param uid {String} userstate id */ pro.removeLoginedUser = function(uid) { if(!!this.logined[uid]) { this.loginedCount--; } delete this.logined[uid]; }; /** * Decrease connection count * * @param uid {String} uid */ pro.decreaseConnectionCount = function(uid) { if(this.connCount) { this.connCount--; } if(!!uid) { this.removeLoginedUser(uid); } }; /** * Get statistics info * * @return {Object} statistics info */ pro.getStatisticsInfo = function() { var list = []; for(var uid in this.logined) { list.push(this.logined[uid]); } return {serverId: this.serverId, totalConnCount: this.connCount, loginedCount: this.loginedCount, loginedList: list}; };