diff --git a/gm-server/app/controller/game.ts b/gm-server/app/controller/game.ts index 0d0ae2ac8..f60e0726e 100644 --- a/gm-server/app/controller/game.ts +++ b/gm-server/app/controller/game.ts @@ -56,6 +56,12 @@ export default class GameController extends Controller { return } + public async getOnlineUsersByServer() { + const { ctx } = this; + ctx.body = await ctx.service.game.getOnlineUsersByServer(); + return + } + public async stopServerRegister() { const { ctx } = this; const { id } = ctx.request.body; diff --git a/gm-server/app/router.ts b/gm-server/app/router.ts index 227b6cf84..c6e1466c0 100644 --- a/gm-server/app/router.ts +++ b/gm-server/app/router.ts @@ -44,6 +44,7 @@ export default (app: Application) => { router.post('/api/game/getregions', tokenParser, controller.game.getRegions); router.post('/api/game/createregion', tokenParser, controller.game.createRegion); router.post('/api/game/getservers', tokenParser, controller.game.getServers); + router.post('/api/game/getOnlineUsersByServer', controller.game.getOnlineUsersByServer); router.post('/api/game/getregionstategy', tokenParser, controller.game.getRegionStategy); router.post('/api/game/getwhitelist', tokenParser, controller.game.getWhiteList); router.post('/api/game/updatewhitelist', tokenParser, controller.game.updateWhiteList); diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index ff4cdf92d..3f212b426 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -1,5 +1,5 @@ import { Service } from 'egg'; -import { STATUS } from '@consts'; +import { REDIS_KEY, STATUS } from '@consts'; import { ServerlistModel } from '@db/Serverlist'; import { gameData } from '@pubUtils/data'; import { DicHero } from '@pubUtils/dictionary/DicHero'; @@ -19,6 +19,7 @@ import { DicServerName } from '@pubUtils/dictionary/DicServerName'; import { CreateRegionParam } from '@domain/backEndField/params'; import { UserOrderModel } from '@db/UserOrder'; import { SurveyModel } from '@db/Survery'; +import { RedisClient } from 'redis'; /** * Test Service @@ -60,6 +61,31 @@ export default class Game extends Service { }); } + public async getOnlineUsersByServer() { + const { ctx } = this; + let redisClient: RedisClient = ctx.app.context.redisClient; + let allRoles = await redisClient.hgetallAsync(REDIS_KEY.ONLINE_USERS); + let result: { serverId: number, count: number }[] = []; + for(let roleId in allRoles) { + try{ + let param = allRoles[roleId].split('|'); + let [,,,, _serverId] = param; + let serverId = parseInt(_serverId); + let index = result.findIndex(cur => cur.serverId == serverId); + if(index == -1) { + result.push({ serverId, count: 1 }); + } else { + result[index].count++; + } + } catch(e) { + continue; + } + } + return ctx.service.utils.resResult(STATUS.SUCCESS, { + result + }); + } + public async stopServerRegister(id: number) { const { ctx } = this; const server = await ServerlistModel.updateByServerId(id, { stopRegisterTime: nowSeconds() - 1 });