generated from root/miduo_server
增加合服后离线榜单信息的处理
parent
27befe257c
commit
344d7d0803
|
|
@ -476,6 +476,7 @@ public class RedisKey {
|
|||
public static final String USER_SIMPLE_INFO = "USER_SIMPLE_INFO";
|
||||
public static final String DEFTRAINING_RANK_MARK = "DEFTRAINING_RANK_MARK";
|
||||
public static final String F5_PRE_REWARD = "F5_PRE_REWARD";//F5谷歌预注册奖励
|
||||
public static final String RANK_REWARD_SLAVE_SERVERS = "RANK_REWARD_SLAVE_SERVERS";//主服对应的从服服务器id集合,合并离线奖励用
|
||||
|
||||
//public static Set<String> worldDeathPathCacChe = new HashSet<>();
|
||||
|
||||
|
|
|
|||
|
|
@ -65,10 +65,57 @@ public class RankRewardLogic {
|
|||
//重置榜单结算时间顺序表,用于结算奖励时使用
|
||||
this.resetTimeList(e.getType());
|
||||
}
|
||||
|
||||
}
|
||||
//处理合服数据
|
||||
this.composeServerRankReward(diff);
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并从服的离线结算信息到主服,合服后调用,并只执行一次
|
||||
*/
|
||||
public void composeServerRankReward(int diff){
|
||||
String key = RedisKey.RANK_REWARD_SLAVE_SERVERS + RedisKey.Delimiter_colon + GameApplication.serverId;
|
||||
String slaveServers = (String)RedisUtil.getInstence().get(key);
|
||||
if(slaveServers == null || slaveServers.isEmpty()){
|
||||
return;
|
||||
}
|
||||
String[] servers = slaveServers.split(",");
|
||||
if(servers.length <=0){
|
||||
return;
|
||||
}
|
||||
for(String server:servers){
|
||||
//是主服,不处理
|
||||
String serverId = String.valueOf(GameApplication.serverId);
|
||||
if(server.equals(serverId)){
|
||||
continue;
|
||||
}
|
||||
for(RankRewardEunm e : RankRewardEunm.values()){
|
||||
String slaveKey = server + RedisKey.Delimiter_colon + e.getRedisKey();
|
||||
String masterKey = GameApplication.serverId + RedisKey.Delimiter_colon + e.getRedisKey();
|
||||
Map<Integer, Map<Integer,Integer>> map = RedisUtil.getInstence().getMapValues(slaveKey);
|
||||
if(map != null && map.size() > 0){
|
||||
for(int time : map.keySet()){
|
||||
//失效了,不添加并清除redis信息
|
||||
if(time < diff){
|
||||
RedisUtil.getInstence().hdel(slaveKey, String.valueOf(time));
|
||||
continue;
|
||||
}
|
||||
Map<Integer,Integer> users = map.get(time);
|
||||
if(users != null && users.size() > 0){
|
||||
//添加榜单备份信息,并保存新数据到redis,但是不重置榜单结算信息,最后统重置
|
||||
this.composeAddRankMark(e.getType(),time,masterKey,users,true,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//重置时间排行榜
|
||||
for(RankRewardEunm e : RankRewardEunm.values()){
|
||||
this.resetTimeList(e.getType());
|
||||
}
|
||||
//清除要合并的从服信息,防止下次再合并
|
||||
RedisUtil.getInstence().del(key);
|
||||
}
|
||||
/**
|
||||
* 添加一个新的榜单备份信息
|
||||
* @param type
|
||||
|
|
@ -113,6 +160,60 @@ public class RankRewardLogic {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 合服添加榜单信息
|
||||
* @param type
|
||||
* @param time
|
||||
* @param users
|
||||
* @param save
|
||||
* @param reset
|
||||
*/
|
||||
public void composeAddRankMark(int type, int time, String key,Map<Integer,Integer> users,boolean save,boolean reset) {
|
||||
if(!rankMarks.containsKey(type)) {
|
||||
Map<Integer,Map<Integer,Integer>> map = new HashMap<Integer, Map<Integer, Integer>>();
|
||||
map.put(time, users);
|
||||
rankMarks.put(type, map);
|
||||
if(save){
|
||||
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
|
||||
}
|
||||
if(reset){
|
||||
this.resetTimeList(type);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Map<Integer, Map<Integer, Integer>> map = rankMarks.get(type);
|
||||
if(map == null) {
|
||||
map = new HashMap<Integer, Map<Integer, Integer>>();
|
||||
map.put(time, users);
|
||||
rankMarks.put(type, map);
|
||||
if(save){
|
||||
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
|
||||
}
|
||||
if(reset){
|
||||
this.resetTimeList(type);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(map.containsKey(time)){//同一个时间key,合并数据,并保存合并后的users
|
||||
Map<Integer,Integer> masterUsers = map.get(time);
|
||||
if(masterUsers == null){
|
||||
masterUsers = new HashMap<Integer,Integer>();
|
||||
}
|
||||
masterUsers.putAll(users);
|
||||
if(save){
|
||||
RedisUtil.getInstence().putMap(key, String.valueOf(time),masterUsers);
|
||||
}
|
||||
}else{
|
||||
map.put(time, users);
|
||||
if(save){
|
||||
RedisUtil.getInstence().putMap(key, String.valueOf(time),users);
|
||||
}
|
||||
}
|
||||
if(reset){
|
||||
this.resetTimeList(type);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查榜单是否有效,及时删除
|
||||
*/
|
||||
|
|
@ -200,6 +301,7 @@ public class RankRewardLogic {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 结算榜单奖励
|
||||
* @param user
|
||||
|
|
|
|||
Loading…
Reference in New Issue