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..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("跨服开始分组"); @@ -256,9 +259,6 @@ public class GlobleSystemLogic implements IEventHandler { index++; } - // 跨服排行榜处理 - CrossRankManager.getInstance().cleanCrossRank(); - CrossRankManager.getInstance().crossRankHandle(true); redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split); //发分组邮件 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..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 @@ -48,39 +48,34 @@ public class CrossRankManager { */ public void crossRankHandle(boolean choice){ // 时间验证 - if (choice || isTime()){ + if (isTime()){ // 全部排行遍历 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); } } } - // 更新时间 - isTime(); } } @@ -116,17 +111,16 @@ 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); + time = 0L; + LOGGER.info("=====================跨服排行榜清理========,key:{},time:{}",key,time); } } } 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){ 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(); } }