diff --git a/gm-server/app/controller/game.ts b/gm-server/app/controller/game.ts index f60e0726e..33d77a590 100644 --- a/gm-server/app/controller/game.ts +++ b/gm-server/app/controller/game.ts @@ -78,6 +78,14 @@ export default class GameController extends Controller { return } + public async switchServerReview() { + const { ctx } = this; + const { id, isReview } = ctx.request.body; + + ctx.body = await ctx.service.game.switchServerReview(id, isReview); + return + } + public async getOrderlist() { const { ctx } = this; const { page, pageSize, sortField, sortOrder, form } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index da99b2098..40d8b6bbe 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -51,6 +51,7 @@ export default (app: Application) => { router.post('/api/game/deletewhitelist', tokenParser, controller.game.deleteWhiteList); router.post('/api/game/stopserverregister', tokenParser, controller.game.stopServerRegister); router.post('/api/game/swicthserverstatus', tokenParser, controller.game.switchServerStatus); + router.post('/api/game/switchserverreview', controller.game.switchServerReview); router.post('/api/game/getorderlist', tokenParser, controller.game.getOrderlist); router.post('/api/game/getsurveylist', controller.game.getSurveylist); diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index 3f212b426..12fa0e582 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -100,6 +100,13 @@ export default class Game extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS); } + public async switchServerReview(id: number, isReview: boolean) { + const { ctx } = this; + const server = await ServerlistModel.updateByServerId(id, { isReview }); + if(!server) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + return ctx.service.utils.resResult(STATUS.SUCCESS); + } + public async getRegionStategy(id: number) { const { ctx } = this; let region = await RegionModel.findRegionById(id); diff --git a/shared/db/Region.ts b/shared/db/Region.ts index 650892985..4f0edb01a 100644 --- a/shared/db/Region.ts +++ b/shared/db/Region.ts @@ -60,6 +60,12 @@ export default class Region extends BaseModel { @prop({ required: true, type: () => ServerStategy, _id: false }) stategy: ServerStategy; // 策略配置 + @prop({ required: true }) + reviewEnv: string; // 对应的审核服 + + @prop({ required: true }) + reviewVersion: string; // 大于这个版本的都是审核服 + public static async createNewRegion(params: RegionUpdate, uid = 1) { let id = await CounterAllModal.getNewCounter(COUNTER.REGION); diff --git a/shared/db/Serverlist.ts b/shared/db/Serverlist.ts index 99e5dabd5..bd1e01a92 100644 --- a/shared/db/Serverlist.ts +++ b/shared/db/Serverlist.ts @@ -40,6 +40,9 @@ export default class Serverlist extends BaseModel { @prop({ required: true }) env: string; // 环境变量 + @prop({ required: true }) + isReview: boolean; // 是否是审核服 + @prop({ required: true }) prefix: string; // 前缀 @@ -143,9 +146,14 @@ export default class Serverlist extends BaseModel { return server; } - public static async findByEnv(env?: string) { - let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 } }).sort({ id: -1 }).lean({ getters: true, virtuals: true }); - return server; + public static async findByEnv(env?: string, isReview = false) { + if(isReview) { + let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 }, isReview }).sort({ id: -1 }).lean({ getters: true, virtuals: true }); + return server; + } else { + let server: ServerlistType[] = await ServerlistModel.find({ env, serverStatus: { $gt: 0 } }).sort({ id: -1 }).lean({ getters: true, virtuals: true }); + return server; + } } //根据多个活动id查询活动数据 diff --git a/shared/domain/backEndField/params.ts b/shared/domain/backEndField/params.ts index 4a2f5d49e..56710c235 100644 --- a/shared/domain/backEndField/params.ts +++ b/shared/domain/backEndField/params.ts @@ -78,6 +78,8 @@ export class UpdateRegionParams { versionCode: string = ''; curVersion: string = ''; updateResUrl: string = ''; + reviewVersion: string = ''; + reviewEnv: string = ''; maxPlayerCnt: number = 0; timers: SERVER_TIMER[] = []; @@ -117,6 +119,8 @@ export class UpdateRegionParams { remark: this.remark, versionCode: this.versionCode, curVersion: this.curVersion, + reviewVersion: this.reviewVersion, + reviewEnv: this.reviewEnv, updateResUrl: this.updateResUrl, stategy } @@ -128,6 +132,8 @@ export class UpdateRegionParams { remark: this.remark||oldRegion.remark, versionCode: this.versionCode||oldRegion.versionCode, curVersion: this.curVersion||oldRegion.curVersion, + reviewVersion: this.reviewVersion||oldRegion.reviewVersion, + reviewEnv: this.reviewEnv||oldRegion.reviewEnv, updateResUrl: this.updateResUrl||oldRegion.updateResUrl, stategy: { ...(oldRegion.stategy||{}), ...stategy } } diff --git a/web-server/app/controller/game.ts b/web-server/app/controller/game.ts index e113072bd..d72a519d2 100644 --- a/web-server/app/controller/game.ts +++ b/web-server/app/controller/game.ts @@ -31,15 +31,40 @@ export default class GameController extends Controller { return; } + public async checkReview() { + const { ctx } = this; + const { version } = ctx.request.body; + + let curRegion = await RegionModel.findRegionByEnv(this.app.config.realEnv); + if(!curRegion) return resResult(STATUS.VERSION_ERR); + + let isReview = await ctx.service.update.checkReview(curRegion, version); + let hasNewWebServer = false, webServerUrl = ''; + if(isReview && curRegion.reviewEnv) { + let reviewRegion = await RegionModel.findRegionByEnv(curRegion.reviewEnv); + if(reviewRegion) { + hasNewWebServer = true, webServerUrl = reviewRegion.webHost; + } + } + ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS, { isReview, hasNewWebServer, webServerUrl }); + return; + } + public async getServerList() { try { const { ctx } = this; - let { uid, clientVersion } = ctx; - console.log('clientVersion', clientVersion); + let { uid } = ctx; + const { version } = ctx.request.body; let serverList = new Array(); let loginServerList = new Array(); - let allServers = await ServerlistModel.findByEnv(ctx.app.config.realEnv); + let curRegion = await RegionModel.findRegionByEnv(this.app.config.realEnv); + if(!curRegion) return resResult(STATUS.VERSION_ERR); + + let isReview = await ctx.service.update.checkReview(curRegion, version); + let env = isReview? curRegion.reviewEnv: ctx.app.config.realEnv; + + let allServers = await ServerlistModel.findByEnv(env||ctx.app.config.realEnv, isReview); let roles = await RoleModel.findAllByUid(uid, true, true); for (let server of allServers) { let curGroup = serverList.find(cur => cur.groupId == server.groupId); diff --git a/web-server/app/router.ts b/web-server/app/router.ts index 6cb35b141..8d7a50143 100644 --- a/web-server/app/router.ts +++ b/web-server/app/router.ts @@ -8,6 +8,7 @@ export default (app: Application) => { router.get('/dev', controller.home.dev); router.get('/dev/smscode', controller.account.getSmsCode); router.get('/', controller.home.index); + router.post('/user/checkreview', controller.game.checkReview); router.post('/user/channellogin', controller.account.channelLogin); router.post('/user/devicelogin', controller.account.deviceLogin); router.post('/user/getsms', controller.account.getSms); diff --git a/web-server/app/service/Update.ts b/web-server/app/service/Update.ts index 55c0624bf..a1010c15d 100644 --- a/web-server/app/service/Update.ts +++ b/web-server/app/service/Update.ts @@ -1,4 +1,5 @@ import { STATUS, } from '@consts'; +import { RegionType } from '@db/Region'; import { Service } from 'egg'; // let fs = require("fs"); @@ -34,5 +35,13 @@ export default class Update extends Service { remoteVersionUrl: `${baseUrl}/version.manifest` }); } + + public async checkReview(curRegion: RegionType, version: string) { + const ctx = this.ctx; + + if(!curRegion || !curRegion.reviewVersion || !version) return false; + let reviewVersionFlag = ctx.service.utils.compareVersion(version, curRegion.reviewVersion); + return `${ctx.clientIp}`.startsWith('17.') || reviewVersionFlag > 0; + } }