跨服分组改为gm上手动分组,去除自动分组
parent
51b0872905
commit
1368922c6d
|
|
@ -331,6 +331,8 @@ public class RedisKey {
|
||||||
|
|
||||||
public static final String SERVER_SPLIT_INFO = "SERVER_SPLIT_INFO";
|
public static final String SERVER_SPLIT_INFO = "SERVER_SPLIT_INFO";
|
||||||
|
|
||||||
|
public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";
|
||||||
|
|
||||||
public static final String SERVER_SPLIT_MAIL_INFO = "SERVER_SPLIT_MAIL_INFO";
|
public static final String SERVER_SPLIT_MAIL_INFO = "SERVER_SPLIT_MAIL_INFO";
|
||||||
|
|
||||||
// 跨服 排行
|
// 跨服 排行
|
||||||
|
|
|
||||||
|
|
@ -1403,7 +1403,8 @@ public class RedisUtil {
|
||||||
RedisKey.CROSS_SERVICE_ARENA.equals(type) || RedisKey.WORLD_ARENA_RANK_MY_MATH.equals(type) ||
|
RedisKey.CROSS_SERVICE_ARENA.equals(type) || RedisKey.WORLD_ARENA_RANK_MY_MATH.equals(type) ||
|
||||||
RedisKey.WORLD_ARENA_MY_PRON.equals(type) || RedisKey.WORLD_ARENA_RRECORD.equals(type) ||
|
RedisKey.WORLD_ARENA_MY_PRON.equals(type) || RedisKey.WORLD_ARENA_RRECORD.equals(type) ||
|
||||||
RedisKey.TOKEN.equals(type) || RedisKey.USER_SERVER_INFO.equals(type) ||
|
RedisKey.TOKEN.equals(type) || RedisKey.USER_SERVER_INFO.equals(type) ||
|
||||||
RedisKey.CDKEY.equals(type) || RedisKey.ServerArenaJob.equals(type)
|
RedisKey.CDKEY.equals(type) || RedisKey.ServerArenaJob.equals(type) ||
|
||||||
|
RedisKey.CROSS_SERVER_GROUP.equals(type)
|
||||||
) {
|
) {
|
||||||
result = type + RedisKey.Delimiter_colon + key;
|
result = type + RedisKey.Delimiter_colon + key;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -227,8 +227,11 @@ public class GlobleSystemLogic implements IEventHandler {
|
||||||
|
|
||||||
public static void setGloableWorldLeveCacheLine(int gloableWorldLeveCacheLine) {
|
public static void setGloableWorldLeveCacheLine(int gloableWorldLeveCacheLine) {
|
||||||
GLOABLE_WORLD_LEVE_CACHE_LINE = gloableWorldLeveCacheLine;
|
GLOABLE_WORLD_LEVE_CACHE_LINE = gloableWorldLeveCacheLine;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跨服分组逻辑
|
||||||
|
*/
|
||||||
public void doSplit(){
|
public void doSplit(){
|
||||||
LOGGER.info("跨服分组验证处理");
|
LOGGER.info("跨服分组验证处理");
|
||||||
if(!GameApplication.serverProperties.isArenaCross()){
|
if(!GameApplication.serverProperties.isArenaCross()){
|
||||||
|
|
@ -238,10 +241,9 @@ public class GlobleSystemLogic implements IEventHandler {
|
||||||
RedisUtil redisUtil = RedisUtil.getInstence();
|
RedisUtil redisUtil = RedisUtil.getInstence();
|
||||||
Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY);
|
Object matched = redisUtil.get(RedisKey.MATCHED_SPLIT_KEY);
|
||||||
if(matched!=null){
|
if(matched!=null){
|
||||||
LOGGER.error("跨服分组,获取key:【MATCHED_SPLIT_KEY】失败, info:{}",matched.toString());
|
LOGGER.error("跨服分组,获取key:【MATCHED_SPLIT_KEY】失败, info:{}", matched);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
|
|
||||||
//使用分布式锁,保证只有一个服来分组
|
//使用分布式锁,保证只有一个服来分组
|
||||||
boolean lock = redisUtil.lock("SERVER_SPLIT_REDIS_LOCK", TimeUtils.ONE_MINUTE * 2);
|
boolean lock = redisUtil.lock("SERVER_SPLIT_REDIS_LOCK", TimeUtils.ONE_MINUTE * 2);
|
||||||
if(!lock){
|
if(!lock){
|
||||||
|
|
@ -251,42 +253,31 @@ public class GlobleSystemLogic implements IEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
//这里为所有服务器的世界等级
|
//这里为所有服务器的世界等级
|
||||||
Map<String,Integer> worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class);
|
// Map<String,Integer> worldLevelMap = redisUtil.getMapValues(RedisKey.SERVER_WORLDLEVE_INFO,"",String.class,Integer.class);
|
||||||
|
|
||||||
LOGGER.info("跨服开始分组");
|
LOGGER.info("跨服开始分组");
|
||||||
long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true);
|
long lastHour = TimeUtils.getLastOrUnderHour(TimeUtils.now(), 1, 0, 0, true);
|
||||||
lastHour+=TimeUtils.WEEK;
|
lastHour+=TimeUtils.WEEK;
|
||||||
int expireTime =(int)((lastHour-TimeUtils.now())/1000);
|
int expireTime =(int)(lastHour-TimeUtils.nowInt());
|
||||||
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60);
|
redisUtil.set(RedisKey.MATCHED_SPLIT_KEY,String.valueOf(1),expireTime-60);
|
||||||
|
|
||||||
//提前两分钟结算
|
//提前两分钟结算
|
||||||
redisUtil.set(RedisKey.MATCHED_VERSION,TimeUtils.getTimeStampYMD(System.currentTimeMillis()),expireTime-120);
|
redisUtil.set(RedisKey.MATCHED_VERSION,TimeUtils.getTimeStampYMD(System.currentTimeMillis()),expireTime-120);
|
||||||
worldLevelMap.forEach((k,v)->{
|
// SMServerArenaSetting setting = STableManager.getConfig(SMServerArenaSetting.class).get(1);
|
||||||
if(v>setting.getWorldLevel()){
|
// worldLevelMap.forEach((k,v)->{
|
||||||
redisUtil.zsetAddOne(RedisKey.SERVER_LEVEL_RANK,k,v);
|
// if(v>setting.getWorldLevel()){
|
||||||
}});
|
// redisUtil.zsetAddOne(RedisKey.SERVER_LEVEL_RANK,k,v);
|
||||||
Set<ZSetOperations.TypedTuple<String>> zsetRevRangeWithScore = redisUtil.getZsetreverseRangeByRangeWithScores(RedisKey.SERVER_LEVEL_RANK, setting.getWorldLevel(), 999);
|
// }});
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
int areaId = 1;
|
|
||||||
Map<String,Integer> split = new HashMap<>(zsetRevRangeWithScore.size());
|
|
||||||
for(ZSetOperations.TypedTuple<String> data:zsetRevRangeWithScore){
|
|
||||||
if(index>=setting.getServerNum()){
|
|
||||||
if((zsetRevRangeWithScore.size()-areaId*setting.getServerNum())>setting.getServerNum()/2){
|
|
||||||
areaId++;
|
|
||||||
}
|
|
||||||
index=0;
|
|
||||||
}
|
|
||||||
split.put(data.getValue(),areaId);
|
|
||||||
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 分组逻辑
|
||||||
|
Map<String, Integer> split = redisUtil.getMapValues(RedisKey.CROSS_SERVER_GROUP, "", String.class, Integer.class);
|
||||||
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split);
|
redisUtil.putMapEntrys(RedisKey.SERVER_SPLIT_INFO,"",split);
|
||||||
//发分组邮件
|
//发分组邮件
|
||||||
split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0));
|
split.keySet().forEach(server->redisUtil.putMapEntry(RedisKey.SERVER_SPLIT_MAIL_INFO,"",server,0));
|
||||||
//清除分组聊天记录
|
//清除分组聊天记录
|
||||||
for(int i=1;i<=areaId;i++){
|
for (Integer value : split.values()) {
|
||||||
redisUtil.del(RedisKey.CHAT_CROSS_INFO_CACHE+i);
|
redisUtil.del(RedisKey.CHAT_CROSS_INFO_CACHE+value);
|
||||||
redisUtil.del(RedisKey.CHAT_CROSS_MSG_ID+i);
|
redisUtil.del(RedisKey.CHAT_CROSS_MSG_ID+value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 重新分组,需要删除旧排行榜数据,重新分组
|
// 重新分组,需要删除旧排行榜数据,重新分组
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue