系统:停服维护逻辑
This commit is contained in:
@@ -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() {
|
||||
|
||||
22
web-server/app/middleware/checkMainten.ts
Normal file
22
web-server/app/middleware/checkMainten.ts
Normal 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();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ module.exports = () => {
|
||||
ctx.auth = user.auth;
|
||||
ctx.userCode = user.userCode;
|
||||
ctx.pkgName = user.pkgName;
|
||||
ctx.tel = user.tel;
|
||||
await next();
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
26
web-server/app/service/Game.ts
Normal file
26
web-server/app/service/Game.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
2
web-server/typings/app/middleware/index.d.ts
vendored
2
web-server/typings/app/middleware/index.d.ts
vendored
@@ -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;
|
||||
|
||||
2
web-server/typings/app/service/index.d.ts
vendored
2
web-server/typings/app/service/index.d.ts
vendored
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user