diff --git a/shared/db/Region.ts b/shared/db/Region.ts index d1ad3ec67..650892985 100644 --- a/shared/db/Region.ts +++ b/shared/db/Region.ts @@ -40,7 +40,7 @@ export default class Region extends BaseModel { latestServer: number; // 最新服 @prop({ required: true }) - versionCode: number; // 支持的最小版本号 + versionCode: string; // 支持的最小版本号 @prop({ required: true }) curVersion: string; // 当前版本号,格式 x.x.x.x diff --git a/shared/domain/backEndField/params.ts b/shared/domain/backEndField/params.ts index 0deafd8d7..9d53d4b13 100644 --- a/shared/domain/backEndField/params.ts +++ b/shared/domain/backEndField/params.ts @@ -74,7 +74,7 @@ export class UpdateRegionParams { name: string = ''; // 大区名 prefix: string = ''; // 区名前缀 remark: string = ''; - versionCode: number = 1; + versionCode: string = ''; curVersion: string = ''; updateResUrl: string = ''; @@ -95,7 +95,7 @@ export class UpdateRegionParams { } checkParams() { - if(!this.id || !this.name || !this.prefix || !this.maxPlayerCnt || !isArray(this.timers) || this.timers.length <= 0 || !isArray(this.activityGroupId) || this.activityGroupId.length <= 0 || !isNumber(this.versionCode) || !isString(this.curVersion) || !isString(this.updateResUrl)) { + if(!this.id || !this.name || !this.prefix || !this.maxPlayerCnt || !isArray(this.timers) || this.timers.length <= 0 || !isArray(this.activityGroupId) || this.activityGroupId.length <= 0 || !isString(this.versionCode) || !isString(this.curVersion) || !isString(this.updateResUrl)) { return false } return true; @@ -132,7 +132,7 @@ export class CreateRegionParam { name: string = ''; // 大区名 prefix: string = ''; // 区名前缀 remark: string = ''; - versionCode: number = 1; + versionCode: string = ''; env: string = ''; // 环境变量 gmLink: string; // 对应后台链接 gameHost: string; // 长链接 @@ -147,7 +147,7 @@ export class CreateRegionParam { } checkParams() { - if(!this.name || !this.prefix || !this.env || !this.gmLink || !this.gameHost || !this.gmPort || !this.webHost || !isNumber(this.gmPort) || !isNumber(this.versionCode) || !this.updateResUrl) { + if(!this.name || !this.prefix || !this.env || !this.gmLink || !this.gameHost || !this.gmPort || !this.webHost || !isNumber(this.gmPort) || !isString(this.versionCode) || !this.updateResUrl) { return false } return true; diff --git a/web-server/app/controller/game.ts b/web-server/app/controller/game.ts index dc9e14499..e113072bd 100644 --- a/web-server/app/controller/game.ts +++ b/web-server/app/controller/game.ts @@ -21,7 +21,8 @@ export default class GameController extends Controller { let curRegion = await RegionModel.findRegionByEnv(this.app.config.realEnv); if(!curRegion) return resResult(STATUS.VERSION_ERR); - if (version >= curRegion.versionCode) { + const versionFlag = ctx.service.utils.compareVersion(version, curRegion.versionCode); + if (versionFlag >= 0) { ctx.body = ctx.service.utils.resResult(STATUS.SUCCESS); return; } diff --git a/web-server/app/service/Utils.ts b/web-server/app/service/Utils.ts index 90af1d5c9..d1e2d8acb 100644 --- a/web-server/app/service/Utils.ts +++ b/web-server/app/service/Utils.ts @@ -71,4 +71,24 @@ export default class Utils extends Service { } return true; } + + // 比较以 . 分隔的版本号。返回 0 则版本号相等,返回正数则 versionA 大,返回负数则 versionB 大 + public compareVersion (versionA: string, versionB: string) { + var vA = versionA.split('.'); + var vB = versionB.split('.'); + for (var i = 0; i < vA.length; ++i) { + var a = parseInt(vA[i]); + var b = parseInt(vB[i] || '0'); + if (a === b) { + + } else { + return a - b; + } + } + if (vB.length > vA.length) { + return -1; + } else { + return 0; + } + }; }