跨服bug修改

duhui 2021-09-13 00:29:30 +08:00
parent ca301e1733
commit 28a7882999
4 changed files with 36 additions and 28 deletions

View File

@ -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;
}
//这里为所有服务器的世界等级

View File

@ -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);
}
}

View File

@ -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<Integer, GuildCache> cacheMap = RedisUtil.getInstence().getMapValues(RedisKey.FAMILY_INFO, "", Integer.class, GuildCache.class);
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true);
for (ZSetOperations.TypedTuple<String> 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<Integer, GuildCache> cacheMap = RedisUtil.getInstence().getMapValues(RedisKey.FAMILY_INFO, "", Integer.class, GuildCache.class);
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true);
for (ZSetOperations.TypedTuple<String> 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();
}
}

View File

@ -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);
}
}