防沉迷:修复登录退出时不必全部用户循环
This commit is contained in:
@@ -20,7 +20,7 @@ import { gameData } from '../../../pubUtils/data';
|
|||||||
|
|
||||||
import { getMails } from '../../../services/mailService';
|
import { getMails } from '../../../services/mailService';
|
||||||
import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGuildChannel, leaveSysChannel, leaveWorldChannel } from '../../../services/chatService';
|
import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGuildChannel, leaveSysChannel, leaveWorldChannel } from '../../../services/chatService';
|
||||||
import { reportOnlineSchedule } from '../../../services/timeTaskService';
|
import { reportOneOnline } from '../../../services/timeTaskService';
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
return new EntryHandler(app);
|
return new EntryHandler(app);
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ export class EntryHandler {
|
|||||||
let mails = await getMails(role.roleId, serverId)
|
let mails = await getMails(role.roleId, serverId)
|
||||||
await chackFunOpenWhenLogin(role, session);
|
await chackFunOpenWhenLogin(role, session);
|
||||||
await loginRefresh(role.roleId);
|
await loginRefresh(role.roleId);
|
||||||
await reportOnlineSchedule();
|
reportOneOnline(role.roleId, user.userCode, self.app.get('serverId'), user.pkgName);
|
||||||
|
|
||||||
role['heros'] = heros;
|
role['heros'] = heros;
|
||||||
role['equips'] = equips;
|
role['equips'] = equips;
|
||||||
@@ -146,7 +146,11 @@ export class EntryHandler {
|
|||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
let serverId = session.get('serverId');
|
let serverId = session.get('serverId');
|
||||||
roleLeave(roleId);
|
roleLeave(roleId).then(function(roleInfo) {
|
||||||
|
if(roleInfo.isOnline) {
|
||||||
|
reportOneOnline(roleId, roleInfo.userCode, sid, roleInfo.pkgName);
|
||||||
|
}
|
||||||
|
});
|
||||||
rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); // 删除redis中寻宝的匹配记录
|
rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); // 删除redis中寻宝的匹配记录
|
||||||
let channelService = this.app.get('channelService');
|
let channelService = this.app.get('channelService');
|
||||||
let channel = channelService.getChannel(roleId, true);
|
let channel = channelService.getChannel(roleId, true);
|
||||||
@@ -158,7 +162,6 @@ export class EntryHandler {
|
|||||||
await leaveWorldChannel(roleId, sid, serverId);
|
await leaveWorldChannel(roleId, sid, serverId);
|
||||||
await leaveGuildChannel(roleId, sid);
|
await leaveGuildChannel(roleId, sid);
|
||||||
RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() });
|
RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() });
|
||||||
reportOnlineSchedule();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -377,7 +377,9 @@ export async function roleLogin(roleId: string, userCode: string, sid: string, p
|
|||||||
* @param roleId role表id
|
* @param roleId role表id
|
||||||
*/
|
*/
|
||||||
export async function roleLeave(roleId: string) {
|
export async function roleLeave(roleId: string) {
|
||||||
return await redisClient().hdelAsync(REDIS_KEY.ONLINE_USERS, roleId);
|
let role = await getRoleOnlineInfo(roleId);
|
||||||
|
await redisClient().hdelAsync(REDIS_KEY.ONLINE_USERS, roleId);
|
||||||
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -271,45 +271,50 @@ export async function reportOnlineSchedule() {
|
|||||||
let allRoles = await getAllOnlineRoles();
|
let allRoles = await getAllOnlineRoles();
|
||||||
console.log('reportOnlineSchedule all roles count: ', allRoles.length)
|
console.log('reportOnlineSchedule all roles count: ', allRoles.length)
|
||||||
for(let { roleId, userCode, sid, pkgName } of allRoles) {
|
for(let { roleId, userCode, sid, pkgName } of allRoles) {
|
||||||
let result = await reportOnline(userCode, pkgName); // 连接sdk
|
let result = reportOneOnline(roleId, userCode, sid, pkgName);
|
||||||
if(!result || result.code == -1) continue;
|
if(!result) continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let user = await UserModel.findUserByUserCode(userCode);
|
export async function reportOneOnline(roleId: string, userCode: string, sid: string, pkgName: string) {
|
||||||
if(!user) continue;
|
|
||||||
let { reportTime = new Date(), lastLoginTime = new Date(), guestTime, isGuest, hasAuthenticated, birthday } = user;
|
|
||||||
|
|
||||||
let age = getAge(birthday);
|
|
||||||
let isAdult = age >= ADULT_AGE;
|
|
||||||
|
|
||||||
if(isGuest || !hasAuthenticated) {
|
let result = await reportOnline(userCode, pkgName); // 连接sdk
|
||||||
let lastTime = lastLoginTime > reportTime? lastLoginTime.getTime(): reportTime.getTime();
|
if(!result || result.code == -1) return false;
|
||||||
let guestTimeInc = Math.floor((Date.now() - lastTime)/1000);
|
|
||||||
user = await UserModel.updatePlayTime(userCode, guestTimeInc, result.total); // 记录时间
|
let user = await UserModel.findUserByUserCode(userCode);
|
||||||
|
if(!user) return false;
|
||||||
|
let { reportTime = new Date(), lastLoginTime = new Date(), guestTime, isGuest, hasAuthenticated, birthday } = user;
|
||||||
|
|
||||||
guestTime = user.guestTime;
|
let age = getAge(birthday);
|
||||||
}
|
let isAdult = age >= ADULT_AGE;
|
||||||
|
|
||||||
if(result.code != ADDICTION_PREVENTION_CODE.SUCCESS && result.age != -1) { // 未成年人防沉迷
|
if(isGuest || !hasAuthenticated) {
|
||||||
|
let lastTime = lastLoginTime > reportTime? lastLoginTime.getTime(): reportTime.getTime();
|
||||||
|
let guestTimeInc = Math.floor((Date.now() - lastTime)/1000);
|
||||||
|
user = await UserModel.updatePlayTime(userCode, guestTimeInc, result.total); // 记录时间
|
||||||
|
|
||||||
|
guestTime = user.guestTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result.code != ADDICTION_PREVENTION_CODE.SUCCESS && result.age != -1) { // 未成年人防沉迷
|
||||||
|
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||||
|
isGuest,
|
||||||
|
guestTime, // 游客已体验时间
|
||||||
|
hasAuthenticated, // 是否进行过实名认证
|
||||||
|
isAdult, // 是否已成年
|
||||||
|
todayPlayTime: result.total, // 今天已游戏时长
|
||||||
|
type: result.code
|
||||||
|
} ), [{uid: roleId, sid: sid}]);
|
||||||
|
} else {
|
||||||
|
if ((isGuest || !hasAuthenticated) && guestTime > GUEST_MAX_TIME) {
|
||||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
||||||
isGuest,
|
isGuest,
|
||||||
guestTime, // 游客已体验时间
|
guestTime, // 游客已体验时间
|
||||||
hasAuthenticated, // 是否进行过实名认证
|
hasAuthenticated, // 是否进行过实名认证
|
||||||
isAdult, // 是否已成年
|
isAdult, // 是否已成年
|
||||||
todayPlayTime: result.total, // 今天已游戏时长
|
todayPlayTime: result.total, // 今天已游戏时长
|
||||||
type: result.code
|
type: ADDICTION_PREVENTION_CODE.GUEST,
|
||||||
} ), [{uid: roleId, sid: sid}]);
|
} ), [{uid: roleId, sid: sid}]);
|
||||||
} else {
|
|
||||||
if ((isGuest || !hasAuthenticated) && guestTime > GUEST_MAX_TIME) {
|
|
||||||
pinus.app.channelService.pushMessageByUids('onPlayTime', resResult(STATUS.SUCCESS, {
|
|
||||||
isGuest,
|
|
||||||
guestTime, // 游客已体验时间
|
|
||||||
hasAuthenticated, // 是否进行过实名认证
|
|
||||||
isAdult, // 是否已成年
|
|
||||||
todayPlayTime: result.total, // 今天已游戏时长
|
|
||||||
type: ADDICTION_PREVENTION_CODE.GUEST,
|
|
||||||
} ), [{uid: roleId, sid: sid}]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user