登录:当账号登录的时候,将已登录玩家踢下

This commit is contained in:
luying
2022-06-18 17:36:01 +08:00
parent a7b4cbd7a0
commit e49c35fa4d
5 changed files with 61 additions and 14 deletions

View File

@@ -48,6 +48,9 @@ export default class Auth extends Service {
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(tel, getuiCID);
}
if(user && user.userCode) {
ctx.service.utils.checkOnlineUser(user.userCode);
}
let param = this.getReturnParam(user);
return this.ctx.service.utils.resResult(STATUS.SUCCESS, {
@@ -68,6 +71,9 @@ export default class Auth extends Service {
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(user.tel, getuiCID);
}
if(user && user.userCode) {
ctx.service.utils.checkOnlineUser(user.userCode);
}
let param = this.getReturnParam(user);
let canLogin = true;
@@ -219,6 +225,9 @@ export default class Auth extends Service {
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(tel, getuiCID);
}
if(user && user.userCode) {
ctx.service.utils.checkOnlineUser(user.userCode);
}
let param = this.getReturnParam(user);
return ctx.service.utils.resResult(STATUS.SUCCESS, param);
}
@@ -281,6 +290,9 @@ export default class Auth extends Service {
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(tel, getuiCID);
}
if(user && user.userCode) {
ctx.service.utils.checkOnlineUser(user.userCode);
}
let param = this.getReturnParam(user);
return ctx.service.utils.resResult(STATUS.SUCCESS, { ...param });
}
@@ -410,11 +422,11 @@ export default class Auth extends Service {
let channelId = getChannelId(channelType, requestResult.data.uid);
const token = ctx.service.utils.generateStr(256);
let { isCreate, user} = await UserModel.createOrUpdateChannelUser(channelId, channelType, {
let { user} = await UserModel.createOrUpdateChannelUser(channelId, channelType, {
...requestResult.data, childGameId:`${childGameId}`, platformAppid
}, token, platform, pkgName, serverType, deviceId, ctx.clientIp);
if(isCreate) {
// ctx.service.sdk.reportTAEventWithDistinctId(distinctId, TA_EVENT.REGISTER, null, ctx.clientIp);
if(user && user.userCode) {
ctx.service.utils.checkOnlineUser(user.userCode);
}
if (getuiCID) {//更新个推cid

View File

@@ -3,6 +3,7 @@ import { resResult as pubResult } from '../pubUtils/util';
import { gameData } from 'app/pubUtils/data';
import { RedisClient } from 'redis';
import { REDIS_KEY } from '@consts';
import { getRedisSubChannel } from 'app/pubUtils/sdkUtil';
const csprng = require('csprng');
/**
* Utils Service
@@ -57,6 +58,25 @@ export default class Utils extends Service {
}
}
public async checkOnlineUser(userCode: string) {
let redisClient: RedisClient = this.ctx.app.context.redisClient;
let onlineRoleId = await redisClient.hgetAsync(REDIS_KEY.USER_CODE, userCode);
if (!!onlineRoleId) { // 多地登陆踢下线
let str = await redisClient.hgetAsync(REDIS_KEY.ONLINE_USERS, onlineRoleId);
if(str) {
try {
let [,sid] = str?.split('|')??[];
let name = getRedisSubChannel(REDIS_KEY.USER_CHANNEL, this.ctx.app.config.env);
let result = await redisClient.publishAsync(name, `${sid}|${onlineRoleId}`);
} catch(e) {
console.error('checkOnlineUser', e);
}
}
}
}
// 检测是否可以登录
public async validateCanLogin() {
if(gameData.serverConst.CLOSE_LOGIN == 1) return false;