From 8ed8485114cf98a6754985e7967ba15ec7dd17a3 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Mon, 23 Nov 2020 13:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=86=E7=BB=84?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GetWorldServerRequestHandler.java | 7 +- .../java/com/global/logic/GlobalLogic.java | 88 +++++++++++++++++++ 2 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 globalidserver/src/main/java/com/global/logic/GlobalLogic.java diff --git a/globalidserver/src/main/java/com/global/handler/GetWorldServerRequestHandler.java b/globalidserver/src/main/java/com/global/handler/GetWorldServerRequestHandler.java index f42436bfa..894254ac3 100644 --- a/globalidserver/src/main/java/com/global/handler/GetWorldServerRequestHandler.java +++ b/globalidserver/src/main/java/com/global/handler/GetWorldServerRequestHandler.java @@ -1,8 +1,8 @@ package com.global.handler; import com.global.GlobalServerApplication; +import com.global.logic.GlobalLogic; import com.google.protobuf.GeneratedMessage; -import com.world.logic.GlobalLogic; import org.springframework.beans.factory.annotation.Autowired; import rpc.global.GlobalProto; import rpc.net.RpcMessage; @@ -16,9 +16,6 @@ import rpc.net.gtGBaseHandler; public class GetWorldServerRequestHandler extends gtGBaseHandler { - @Autowired - public GlobalLogic logic; - @Override public GeneratedMessage processWithProto(RpcMessage rpcMessage, GlobalProto.GetWorldServerRequest proto) throws Exception { @@ -31,7 +28,7 @@ public class GetWorldServerRequestHandler extends gtGBaseHandler splitInfo; + /** + * 分组 + */ + public void doSplit(){ + SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1); + RedisUtil redisUtil = RedisUtil.getInstence(); + //这里为所有服务器的世界等级 + Map worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO+":",String.class,Integer.class); + Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY); + if(matched!=null){ + return; + } + LOGGER.info("Global开始分组"); + long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true); + lastHour+=(2*TimeUtils.WEEK); + int expireTime =(int)((lastHour-TimeUtils.now())/1000); + redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60); + worldLevelMap.forEach((k,v)->redisUtil.zsetAddOne(RedisKey.SERVER_LEVEL_RANK,k,v)); + Set> zsetRevRangeWithScore = redisUtil.getZsetRevRangeWithScore(RedisKey.SERVER_LEVEL_RANK, setting.getWorldLevel(), 999); +// int remain = zsetRevRangeWithScore.size() % 8; + int index = 0; + int areaId = 1; + Map split = new HashMap<>(zsetRevRangeWithScore.size()); + for(ZSetOperations.TypedTuple data:zsetRevRangeWithScore){ + if(index>=setting.getServerNum()){ + if((zsetRevRangeWithScore.size()-areaId*setting.getServerNum())>setting.getServerNum()/2){ + areaId++; + } + index=0; + } + split.put(data.getValue(),areaId); + + index++; + } + redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,split); + LOGGER.info("Global分组结束"); + splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,String.class,Integer.class); + } + + public int getSplitInfo(int serverId){ + + if(splitInfo==null){ + splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,String.class,Integer.class); + } + return splitInfo.getOrDefault(String.valueOf(serverId),-1); + } +}