From d08086fe7817debd5048ce4559f0dd782bbfcbe3 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 9 Aug 2021 17:44:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B7=A8=E6=9C=8Dbug=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/logic/GlobleSystemLogic.java | 7 ++- .../jieling/logic/rank/CrossRankManager.java | 59 +++++++++---------- .../logic/rank/rankImpl/CrossArenaRank.java | 25 +++++++- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java index 715fed8d9..bd21ef353 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -256,9 +256,6 @@ public class GlobleSystemLogic implements IEventHandler { index++; } - // 跨服排行榜处理 - CrossRankManager.getInstance().cleanCrossRank(); - CrossRankManager.getInstance().crossRankHandle(true); redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); //发分组邮件 @@ -269,6 +266,10 @@ public class GlobleSystemLogic implements IEventHandler { redisUtil.del(RedisKey.CHAT_CROSS_MSG_ID+i); } + // 跨服排行榜处理 + CrossRankManager.getInstance().cleanCrossRank(); + CrossRankManager.getInstance().crossRankHandle(true); + //释放分布式锁 redisUtil.del("SERVER_SPLIT_REDIS_LOCK"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java index 452a9e5db..024e98b24 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java @@ -52,30 +52,27 @@ public class CrossRankManager { // 全部排行遍历 for (RankEnum value : RankEnum.values()) { int type = value.getType(); - boolean rank2 = RankContext.isCrossRank2(type); - if (rank2){ - //跨服 - if(RankContext.isCrossRank(type)){ - // 获取分组id,是否跨服 - int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if(crossGroup != -1){ - AbstractRank rank = RankContext.getRankEnum(type); - String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false); - Map cacheMap = RedisUtil.getInstence().getMapValues(RedisKey.FAMILY_INFO, "", Integer.class, GuildCache.class); - Set> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true); - for (ZSetOperations.TypedTuple tuple : range) { - if (tuple.getValue().length() == 8){ - rank.crossUserCache(Integer.parseInt(tuple.getValue())); - }else { - GuildCache cache = cacheMap.get(Integer.valueOf(tuple.getValue())); - if (cache != null && cache.getLeaderUId() != 0){ - rank.crossUserCache(cache.getLeaderUId()); - } + //跨服 + if(RankContext.isCrossRank2(type) && RankContext.isCrossRank(type)){ + // 获取分组id,是否跨服 + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if(crossGroup != -1){ + AbstractRank rank = RankContext.getRankEnum(type); + String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false); + Map cacheMap = RedisUtil.getInstence().getMapValues(RedisKey.FAMILY_INFO, "", Integer.class, GuildCache.class); + Set> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true); + for (ZSetOperations.TypedTuple tuple : range) { + if (tuple.getValue().length() == 8){ + rank.crossUserCache(Integer.parseInt(tuple.getValue())); + }else { + GuildCache cache = cacheMap.get(Integer.valueOf(tuple.getValue())); + if (cache != null && cache.getLeaderUId() != 0){ + rank.crossUserCache(cache.getLeaderUId()); } - RedisUtil.getInstence().zsetAddOne(key,tuple.getValue(),tuple.getScore()); } - LOGGER.info("=====================跨服排行榜处理========,key:{}",key); + RedisUtil.getInstence().zsetAddOne(key,tuple.getValue(),tuple.getScore()); } + LOGGER.info("=====================跨服排行榜处理========,key:{}",key); } } } @@ -116,17 +113,15 @@ public class CrossRankManager { public void cleanCrossRank(){ for (RankEnum value : RankEnum.values()) { int type = value.getType(); - if (RankContext.isCrossRank2(type)) { - //跨服 - if (RankContext.isCrossRank(type)) { - // 获取分组id,是否跨服 - int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if (crossGroup != -1) { - AbstractRank rank = RankContext.getRankEnum(type); - String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false); - RedisUtil.getInstence().del(key); - LOGGER.info("=====================跨服排行榜清理========,key:{}", key); - } + //跨服 + if (RankContext.isCrossRank2(type) && RankContext.isCrossRank(type)) { + // 获取分组id,是否跨服 + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + if (crossGroup != -1) { + AbstractRank rank = RankContext.getRankEnum(type); + String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false); + RedisUtil.getInstence().del(key); + LOGGER.info("=====================跨服排行榜清理========,key:{}", key); } } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java index 8d2ddb34e..260dc44ff 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/CrossArenaRank.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.logic.GlobleSystemLogic; import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; import com.ljsd.jieling.logic.dao.CrossArenaEnemy; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.gm.ArenaOfUser; import com.ljsd.jieling.logic.dao.root.User; import config.SArenaRobotConfig; @@ -13,6 +14,7 @@ import rpc.protocols.CommonProto; import rpc.protocols.PlayerInfoProto; import java.net.UnknownHostException; +import java.util.Set; /** * @author lvxinran @@ -88,9 +90,10 @@ public class CrossArenaRank extends AbstractRank { .setServerName(query.getPlayerManager().getServerName()) .setSex(0); builder.addRanks(everyRank); - } } + } + @Override protected void getMyInfo(User user, String rkey, PlayerInfoProto.RankResponse.Builder allUserResponse){ int myRank= RedisUtil.getInstence().getZSetreverseRank(redisKey,rkey,Integer.toString(user.getId())).intValue(); Double zSetScore = RedisUtil.getInstence().getZSetScore(redisKey, rkey, Integer.toString(user.getId())); @@ -108,7 +111,23 @@ public class CrossArenaRank extends AbstractRank { @Override public PlayerInfoProto.RankResponse getCrossRank(int uid, String rkey, int page, int rankEndLine) throws Exception { - rkey = Integer.toString(GlobleSystemLogic.getInstence().getCrossGroup()); - return getRank(uid,rkey,page,rankEndLine); + if(rankEndLine==-1){ + rankEndLine = 100; + } + User user = UserManager.getUser(uid); + if (page == 0) { + page = 1; + } + int start = (page - 1) * rankEndLine, end = page * rankEndLine - 1; + int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); + Set> scores = + RedisUtil.getInstence().getZsetreverseRangeWithScores(redisKey, String.valueOf(crossGroup), start, end, false); + if(start % rankEndLine == 0){ + start++; + } + PlayerInfoProto.RankResponse.Builder allUserResponse = getCrossAllUserResponse(scores,start); + //当前用户信息 + getCrossMyInfo(user,rkey,allUserResponse); + return allUserResponse.build(); } } From 69a15015debe5ee8d4a1a77136e2108f97326378 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 16 Aug 2021 00:03:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=B7=A8=E6=9C=8D=E6=8E=92=E8=A1=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/GlobleSystemLogic.java | 7 +++---- .../java/com/ljsd/jieling/logic/rank/CrossRankManager.java | 4 +--- .../com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java | 4 +--- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java index bd21ef353..0e405bc85 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -227,6 +227,9 @@ public class GlobleSystemLogic implements IEventHandler { LOGGER.error("跨服分组,未获取到锁"); return; } + // 跨服排行榜处理 + CrossRankManager.getInstance().cleanCrossRank(); + //这里为所有服务器的世界等级 Map worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class); LOGGER.info("跨服开始分组"); @@ -266,10 +269,6 @@ public class GlobleSystemLogic implements IEventHandler { redisUtil.del(RedisKey.CHAT_CROSS_MSG_ID+i); } - // 跨服排行榜处理 - CrossRankManager.getInstance().cleanCrossRank(); - CrossRankManager.getInstance().crossRankHandle(true); - //释放分布式锁 redisUtil.del("SERVER_SPLIT_REDIS_LOCK"); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java index 024e98b24..f163da11a 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java @@ -48,7 +48,7 @@ public class CrossRankManager { */ public void crossRankHandle(boolean choice){ // 时间验证 - if (choice || isTime()){ + if (isTime()){ // 全部排行遍历 for (RankEnum value : RankEnum.values()) { int type = value.getType(); @@ -76,8 +76,6 @@ public class CrossRankManager { } } } - // 更新时间 - isTime(); } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java index ebb8162f3..cd9b97cc1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/rankImpl/AbstractRank.java @@ -252,7 +252,6 @@ public abstract class AbstractRank implements IRank { } private CommonProto.UserRank.Builder getOneUserRank(User everyUser,CommonProto.RankInfo.Builder everyRankInfo){ - String serverName = CrossServiceLogic.getInstance().getServerNameByUId(everyUser.getId()); return CommonProto.UserRank.newBuilder() .setUid(everyUser.getId()) .setUserName(everyUser.getPlayerInfoManager().getNickName()) @@ -265,8 +264,7 @@ public abstract class AbstractRank implements IRank { .setUserSkin(everyUser.getPlayerInfoManager().getUserSkin()) .setUserTitle(everyUser.getPlayerInfoManager().getUserTitle()) .setUserMount(everyUser.getPlayerInfoManager().getUserMount()) - .setPracticeLevel(everyUser.getHeroManager().getPracticeLevel()) - .setServerName(serverName); + .setPracticeLevel(everyUser.getHeroManager().getPracticeLevel()); } public CommonProto.UserRank.Builder getCrossOneUserRank(ArenaOfUser query, CommonProto.RankInfo.Builder everyRankInfo){ From c5686fcd14c56d23f1c9ac96191c5f03a8256498 Mon Sep 17 00:00:00 2001 From: duhui Date: Mon, 16 Aug 2021 00:16:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B7=A8=E6=9C=8D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ljsd/jieling/logic/rank/CrossRankManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java index f163da11a..51627e193 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/rank/CrossRankManager.java @@ -119,7 +119,8 @@ public class CrossRankManager { AbstractRank rank = RankContext.getRankEnum(type); String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false); RedisUtil.getInstence().del(key); - LOGGER.info("=====================跨服排行榜清理========,key:{}", key); + time = 0L; + LOGGER.info("=====================跨服排行榜清理========,key:{},time:{}",key,time); } } }