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 80c6945c2..715fed8d9 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobleSystemLogic.java @@ -208,12 +208,15 @@ public class GlobleSystemLogic implements IEventHandler { } public void doSplit(){ + LOGGER.info("跨服分组验证处理"); if(!GameApplication.serverProperties.isArenaCross()){ + LOGGER.error("跨服分组,测试服不做分组"); return; } RedisUtil redisUtil = RedisUtil.getInstence(); Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY); if(matched!=null){ + LOGGER.error("跨服分组,获取key:【MATCHED_SPLIT_KEY】失败, info:{}",matched.toString()); return; } SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1); @@ -221,6 +224,7 @@ public class GlobleSystemLogic implements IEventHandler { boolean lock = redisUtil.lock("SERVER_SPLIT_REDIS_LOCK", TimeUtils.ONE_MINUTE * 2); if(!lock){ //没有拿到锁直接返回 + LOGGER.error("跨服分组,未获取到锁"); return; } //这里为所有服务器的世界等级 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java index 92f4ccb65..058804cc2 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/mail/MailLogic.java @@ -434,9 +434,10 @@ public class MailLogic { public void sendCrossServerIndication(){ int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); int result = crossGroup == -1 ? 0 : 1; - PlayerInfoProto.IsCrossResponse build = PlayerInfoProto.IsCrossResponse.newBuilder().setIsCross(result).build(); + PlayerInfoProto.IsCrossIndication build = PlayerInfoProto.IsCrossIndication.newBuilder().setIsCross(result).build(); for(ISession session:OnlineUserManager.sessionMap.values()){ - MessageUtil.sendIndicationMessage(session.getUid(),build); + LOGGER.info("=====================开始跨服,推送数据到玩家信息:{},分组id:{}",session.getUid(),crossGroup); + MessageUtil.sendIndicationMessage(session,1,MessageTypeProto.MessageType.IsCrossIndication_VALUE,build,true); } } 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 3796716ab..ab01fa4aa 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 @@ -47,38 +47,40 @@ public class CrossRankManager { * 跨服排行处理 */ public void crossRankHandle(boolean choice){ - if (choice || !isTime()){ - // 不是处理数据的服务器 - return; - } - 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){ - rank.crossUserCache(cache.getLeaderUId()); + // 时间验证 + if (choice || 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){ + rank.crossUserCache(cache.getLeaderUId()); + } } + RedisUtil.getInstence().zsetAddOne(key,tuple.getValue(),tuple.getScore()); } - RedisUtil.getInstence().zsetAddOne(key,tuple.getValue(),tuple.getScore()); + LOGGER.info("=====================跨服排行榜处理========,key:{}",key); } - LOGGER.info("=====================跨服排行榜处理========,key:{}",key); } } } + // 更新时间 + isTime(); } } 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 71dcdc68d..625209228 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 @@ -108,6 +108,7 @@ 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); } }