diff --git a/game-server/app/servers/connector/filter/global.ts b/game-server/app/servers/connector/filter/global.ts index d6d314e4d..ff5af9ca1 100644 --- a/game-server/app/servers/connector/filter/global.ts +++ b/game-server/app/servers/connector/filter/global.ts @@ -13,7 +13,7 @@ import { sendMessageToUser } from "../../../services/pushService"; import { isCheckWord, isSkipEncode } from "../../../pubUtils/sdkUtil"; import { isDevelopEnv } from "../../../services/utilService"; import { isNumber } from "underscore"; -import { redisClient } from "../../../services/redisService"; +import { getServerCreateTime, redisClient } from "../../../services/redisService"; import { checkRouteParam } from "../../../services/checkParam"; import { isApiClose } from "../../../services/chatService"; diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index f60f26413..12c21f12c 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -21,7 +21,7 @@ import { getExpByLv } from '../../../pubUtils/data'; import { reportCreateRoleEventToTa, reportTAEvent, reportTAUserSet } from '../../../services/sdkService'; import { saveLoginAndOutLog } from '../../../pubUtils/logUtil'; import { sendMessageToAllWithSuc, sendMessageToUserWithSuc } from '../../../services/pushService'; -import { getIpLocation } from '../../../services/roleService'; +import { checkServerIsOpen, getIpLocation } from '../../../services/roleService'; import { dispatch } from '../../../pubUtils/dispatcher'; import { leaveRaceActivityToRemote } from '../../../services/guildActivity/guildActivityService'; @@ -62,12 +62,17 @@ export class EntryHandler { } let ip = this.getIp(session); + if(!await checkServerIsOpen(serverId, ip, user.uid)) { + return resResult(STATUS.SERVER_IS_NOT_OPEN) + } + + let ipLocation = await getIpLocation(ip); let role = await RoleModel.findByUidAndSetTime(user.uid, serverId, ip, ipLocation, null, true); if (!role) { return resResult(STATUS.ROLE_NOT_FOUND); } - + let serverName = this.app.getServerId(); await roleLogin(role.roleId, user.userCode, serverName, role.createTime, role.serverId, role.lv, role.topLineupCe); // 保存在线用户 await this.addSession(user, role, session); diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index 1d56325ff..9d0eff0f8 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -14,6 +14,9 @@ import { pick } from 'underscore'; import { Reward } from '../domain/battleField/pvp'; import { CheckMeterial } from './role/checkMaterial'; import IP2Region from "ip2region"; +import { getServerCreateTime } from './redisService'; +import { checkWhiteList } from '../pubUtils/sysUtil'; +import { nowSeconds } from '../pubUtils/timeUtil'; const query = new IP2Region({ disableIpv6: true }); @@ -301,4 +304,13 @@ export async function getIpLocation(ip: string) { } catch(e) { console.error('setIpLocation', e) } -} \ No newline at end of file +} + +// 服务器是否开启 +export async function checkServerIsOpen(serverId: number, ip: string, uid: number) { + let isWhiteList = await checkWhiteList(pinus.app.get('env'), ip, uid, serverId); + if(isWhiteList) return true; + + let serverTime = await getServerCreateTime(serverId); + return serverTime <= nowSeconds(); +} diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index ef4a70152..4a7d12520 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -8,6 +8,7 @@ export const STATUS = { LOGIN_ERR: { code: 5, simStr: '检测到您的账号异地登录,已被迫下线' }, REDLOCK_ERR: { code: 6, simStr: '请勿频繁操作' }, SERVER_MAINTENANCE: { code: 7, simStr: '服务器维护中' }, + SERVER_IS_NOT_OPEN: { code: 7, simStr: '即将开启,敬请期待' }, VERSION_ERR: { code: 8, simStr: '版本号太低,请更新' }, BLOCK_WORDS: { code: 9, simStr: '内容含有敏感字符' }, BLOCKED: { code: 10, simStr: '您已被封禁' }, diff --git a/web-server/app/middleware/checkMainten.ts b/web-server/app/middleware/checkMainten.ts index ac6aaadae..0118f57e0 100644 --- a/web-server/app/middleware/checkMainten.ts +++ b/web-server/app/middleware/checkMainten.ts @@ -16,6 +16,14 @@ module.exports = () => { ctx.body = ctx.service.utils.resResult(STATUS.SERVER_MAINTENANCE); return; } + } else if(server && server.openTime > nowSeconds()) { + let isWhiteList = await checkWhiteList(ctx.app.config.realEnv, ctx.clientIp, ctx.uid, serverId); + if (isWhiteList) { + return await next(); + } else { + ctx.body = ctx.service.utils.resResult(STATUS.SERVER_IS_NOT_OPEN); + return; + } } } return await next();