系统:停服维护逻辑

This commit is contained in:
luying
2021-07-15 14:31:29 +08:00
parent 352aecfb56
commit 0028c9b992
26 changed files with 348 additions and 50 deletions

View File

@@ -27,6 +27,8 @@ export default class FooBoot implements IBoot {
async willReady() {
// All plugins have started, can do some thing before app ready.
// await this.customLoadModel();
const ctx = await this.app.createAnonymousContext();
await ctx.service.game.readDbMaintenance();
}
async didReady() {

View File

@@ -0,0 +1,22 @@
import { STATUS } from '@consts';
import { checkWhiteList } from 'app/pubUtils/util';
module.exports = () => {
return async function checkMainten(ctx, next) {
const { serverId } = ctx.request.body;
if (serverId) {
let maintenServers = ctx.service.game.getServerMainten();
if (maintenServers.indexOf(serverId) != -1) {
let isWhiteList = await checkWhiteList(ctx.tel, ctx.request.ip, ctx.auth);
if (isWhiteList) {
await next();
} else {
ctx.body = ctx.service.utils.resResult(STATUS.SERVER_MAINTENANCE);
return;
}
}
}
await next();
};
};

View File

@@ -19,6 +19,7 @@ module.exports = () => {
ctx.auth = user.auth;
ctx.userCode = user.userCode;
ctx.pkgName = user.pkgName;
ctx.tel = user.tel;
await next();
};
};

View File

@@ -3,6 +3,7 @@ import { Application } from 'egg';
export default (app: Application) => {
const { controller, router } = app;
const tokenParser = app.middleware.tokenParser();
const checkMainten = app.middleware.checkMainten();
router.get('/dev', controller.home.dev);
router.get('/dev/smscode', controller.account.getSmsCode);
router.get('/', controller.home.index);
@@ -11,8 +12,8 @@ export default (app: Application) => {
router.post('/user/smslogin', controller.account.smsLogin);
router.post('/user/setpassword', tokenParser, controller.account.setPassword);
router.post('/user/pwlogin', controller.account.pwLogin);
router.post('/user/checkrole', tokenParser, controller.account.checkRole);
router.post('/user/createrole', tokenParser, controller.account.createRole);
router.post('/user/checkrole', tokenParser, checkMainten, controller.account.checkRole);
router.post('/user/createrole', tokenParser, checkMainten, controller.account.createRole);
router.post('/user/bind', tokenParser, controller.account.bind);
router.post('/user/authentication', tokenParser, controller.account.authentication);
router.post('/game/getserverlist', tokenParser, controller.game.getServerList);

View File

@@ -25,6 +25,7 @@ export default class Auth extends Service {
public async deviceLogin(isGuest: boolean, token: string, deviceId: string, platform: string, pkgName: string, serverType: string, getuiCID: string) {
const ctx = this.ctx;
const ip = ctx.request.ip;
let user = await UserModel.findUserByToken(token);
@@ -41,7 +42,7 @@ export default class Auth extends Service {
});
} else {
user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId);
user = await UserModel.createUser(isGuest, tel, token, platform, pkgName, serverType, deviceId, 0, ip);
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(tel, getuiCID);
}
@@ -61,7 +62,7 @@ export default class Auth extends Service {
}
} else {
const token = ctx.service.utils.generateStr(256);
user = await UserModel.updateToken(user.tel, token, deviceId);
user = await UserModel.updateToken(user.tel, token, deviceId, ip);
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(user.tel, getuiCID);
}
@@ -187,6 +188,7 @@ export default class Auth extends Service {
*/
public async smsLogin(tel: string, deviceId: string, code: string, platform: string, pkgName: string, serverType: string, getuiCID: string) {
const ctx = this.ctx;
const ip = ctx.request.ip;
// 参数检查
const telVerify = this.checkTelNo(tel);
if (telVerify.status !== 0) {
@@ -216,7 +218,7 @@ export default class Auth extends Service {
// 用户注册登录
const token = ctx.service.utils.generateStr(256);
const user = await UserModel.createOrUpdate(false, tel, token, platform, pkgName, serverType, deviceId);
const user = await UserModel.createOrUpdate(false, tel, token, platform, pkgName, serverType, deviceId, ip);
if (getuiCID) {//更新个推cid
await UserModel.updateGetuiCID(tel, getuiCID);
}

View File

@@ -0,0 +1,26 @@
import { Service } from 'egg';
import { MaintenanceModel } from '@db/Maintenance';
/**
* Test Service
*/
export default class Game extends Service {
public setServerMainten(maintenServers: number[]) {
return this.app['maintenServers'] = maintenServers;
}
public getServerMainten() {
return this.app['maintenServers']||[];
}
public async readDbMaintenance() {
const maintenance = await MaintenanceModel.findOpenMaintenance();
if(maintenance) {
this.setServerMainten(maintenance.serverIds);
}
}
}

View File

@@ -2,12 +2,14 @@
// Do not modify this file!!!!!!!!!
import 'egg';
import ExportCheckMainten from '../../../app/middleware/checkMainten';
import ExportGmTokenParser from '../../../app/middleware/gmTokenParser';
import ExportParmsDecode from '../../../app/middleware/parmsDecode';
import ExportTokenParser from '../../../app/middleware/tokenParser';
declare module 'egg' {
interface IMiddleware {
checkMainten: typeof ExportCheckMainten;
gmTokenParser: typeof ExportGmTokenParser;
parmsDecode: typeof ExportParmsDecode;
tokenParser: typeof ExportTokenParser;

View File

@@ -7,6 +7,7 @@ type AnyFunc<T = any> = (...args: any[]) => T;
type CanExportFunc = AnyFunc<Promise<any>> | AnyFunc<IterableIterator<any>>;
type AutoInstanceType<T, U = T extends CanExportFunc ? T : T extends AnyFunc ? ReturnType<T> : T> = U extends AnyClass ? InstanceType<U> : U;
import ExportAuth from '../../../app/service/Auth';
import ExportGame from '../../../app/service/Game';
import ExportTest from '../../../app/service/Test';
import ExportTurboCore from '../../../app/service/TurboCore';
import ExportUtils from '../../../app/service/Utils';
@@ -14,6 +15,7 @@ import ExportUtils from '../../../app/service/Utils';
declare module 'egg' {
interface IService {
auth: AutoInstanceType<typeof ExportAuth>;
game: AutoInstanceType<typeof ExportGame>;
test: AutoInstanceType<typeof ExportTest>;
turboCore: AutoInstanceType<typeof ExportTurboCore>;
utils: AutoInstanceType<typeof ExportUtils>;