occaecatidicta
Version:
112 lines (98 loc) • 2.42 kB
text/typescript
import {Application} from '../../application';
import {UID} from '../../util/constants';
export interface UserLoginRecord {
loginTime: number;
uid: UID;
address: string;
}
/**
* connection statistics service
* record connection, login count and list
*/
export class ConnectionService {
serverId: string;
connCount = 0;
loginedCount = 0;
logined: { [uid: string]: UserLoginRecord } = {};
constructor(app: Application) {
this.serverId = app.getServerId();
}
/**
* Add logined user.
*
* @param uid {String} user id
* @param info {Object} record for logined user
*/
addLoginedUser(uid: UID, info: UserLoginRecord) {
if (!this.logined[uid]) {
this.loginedCount++;
}
info.uid = uid;
this.logined[uid] = info;
}
/**
* Update user info.
* @param uid {String} user id
* @param info {Object} info for update.
*/
updateUserInfo(uid: UID, info: UserLoginRecord) {
let user = this.logined[uid];
if (!user) {
return;
}
for (let p in info) {
if (info.hasOwnProperty(p) && typeof (info as any)[p] !== 'function') {
(user as any)[p] = (info as any)[p];
}
}
}
/**
* Increase connection count
*/
increaseConnectionCount() {
this.connCount++;
}
/**
* Remote logined user
*
* @param uid {String} user id
*/
removeLoginedUser(uid: UID) {
if (!!this.logined[uid]) {
this.loginedCount--;
}
this.logined[uid] = undefined;
}
/**
* Decrease connection count
*
* @param uid {String} uid
*/
decreaseConnectionCount(uid: UID) {
if (this.connCount) {
this.connCount--;
}
if (!!uid) {
this.removeLoginedUser(uid);
}
}
/**
* Get statistics info
*
* @return {Object} statistics info
*/
getStatisticsInfo() {
let list = [];
for (let uid in this.logined) {
if (this.logined[uid]) {
list.push(this.logined[uid]);
}
}
return {
serverId: this.serverId,
totalConnCount: this.connCount,
loginedCount: this.loginedCount,
loginedList: list
};
}
}