车迟斗法抢夺匹配修改
parent
74ccf05238
commit
66c2308952
|
@ -855,6 +855,16 @@ public class RedisUtil {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
public Set<String> getReverseZset(String key,long start,long end){
|
||||
for (int i = 0; i < MAX_TRY_TIMES; i++) {
|
||||
try {
|
||||
return redisTemplate.opsForZSet().reverseRange(key, start, end);
|
||||
} catch (Exception e) {
|
||||
TimeUtils.sleep(FAILED_SLEEP);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Set<ZSetOperations.TypedTuple<String>> getZsetreverseRangeWithScores(String type,String key, long start, long end){
|
||||
String rkey = getKey(type, key);
|
||||
|
|
|
@ -23,10 +23,7 @@ import config.SWorldBossSetting;
|
|||
import manager.STableManager;
|
||||
import org.springframework.data.redis.core.ZSetOperations;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public class GetCarChallengeListHandler extends BaseHandler {
|
||||
@Override
|
||||
|
@ -51,6 +48,8 @@ public class GetCarChallengeListHandler extends BaseHandler {
|
|||
guildInfo.getMembers().values().forEach(integers ->members.addAll(integers));
|
||||
String key = RedisUtil.getInstence().getKey(RedisKey.CAR_DEALY_RANK, "");
|
||||
int zsetSize = RedisUtil.getInstence().getZsetSize(key);
|
||||
List<ZsetTypedTupleWithRank> beforeList = new ArrayList<>(5);
|
||||
List<ZsetTypedTupleWithRank> afterList = new ArrayList<>(5);
|
||||
if(myRank == -1){
|
||||
int start = zsetSize - matchNums;
|
||||
if(start<0){
|
||||
|
@ -59,26 +58,72 @@ public class GetCarChallengeListHandler extends BaseHandler {
|
|||
int end=-1;
|
||||
process(start,end,members,matchNums,infos);
|
||||
}else{
|
||||
//取前面
|
||||
int topStart = myRank - matchSection[0];
|
||||
if(topStart<0){
|
||||
topStart=0;
|
||||
int i = myRank-1;
|
||||
int j = myRank+1;
|
||||
|
||||
while(i>0||j<=zsetSize){
|
||||
|
||||
if(i>0){
|
||||
// Set<String> beforeSet = RedisUtil.getInstence().getReverseZset(key, i - 1, i);
|
||||
Set<ZSetOperations.TypedTuple<String>> beforeScore = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CAR_DEALY_RANK, "", i-1 , i-1);
|
||||
ZSetOperations.TypedTuple<String> beforeNext = beforeScore.iterator().next();
|
||||
if(!members.contains(Integer.parseInt(beforeNext.getValue()))){
|
||||
if(beforeList.size()<matchSection[0]){
|
||||
beforeList.add(new ZsetTypedTupleWithRank(beforeNext,i));
|
||||
}else if(j>zsetSize&&afterList.size()<matchSection[1]){
|
||||
afterList.add(new ZsetTypedTupleWithRank(beforeNext,i));
|
||||
}
|
||||
}
|
||||
if(beforeList.size()<matchSection[0]||(j>=zsetSize&&afterList.size()<matchSection[1])){
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
if(j<=zsetSize){
|
||||
// Set<String> afterSet = RedisUtil.getInstence().getReverseZset(key, j - 1, j);
|
||||
Set<ZSetOperations.TypedTuple<String>> afterScore = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CAR_DEALY_RANK, "", j-1 , j-1);
|
||||
|
||||
ZSetOperations.TypedTuple<String> afterNext = afterScore.iterator().next();
|
||||
if(!members.contains(Integer.parseInt(afterNext.getValue()))){
|
||||
if(afterList.size()<matchSection[1] ){
|
||||
afterList.add(new ZsetTypedTupleWithRank(afterNext,j));
|
||||
}else if(i==0&&beforeList.size()<matchSection[0]){
|
||||
beforeList.add(new ZsetTypedTupleWithRank(afterNext,j));
|
||||
}
|
||||
}
|
||||
if(afterList.size()<matchSection[1]||(i<=0&&beforeList.size()<matchSection[0])){
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
if(beforeList.size()+afterList.size()>=matchSection[1]+matchSection[0]) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
int topEnd = myRank;
|
||||
process(topStart,topEnd,members,matchNums,infos);
|
||||
int downStart = myRank;
|
||||
if(downStart<0){
|
||||
downStart=0;
|
||||
}
|
||||
int downEnd = myRank+matchSection[1];
|
||||
process(downStart,downEnd,members,matchNums,infos);
|
||||
beforeList.addAll(afterList);
|
||||
// infos.addAll(beforeList);
|
||||
// //取前面
|
||||
// int topStart = myRank - matchSection[0];
|
||||
// if(topStart<0){
|
||||
// topStart=0;
|
||||
// }
|
||||
// int topEnd = myRank;
|
||||
// process(topStart,topEnd,members,matchNums,infos);
|
||||
// int downStart = myRank;
|
||||
// if(downStart<0){
|
||||
// downStart=0;
|
||||
// }
|
||||
// int downEnd = myRank+matchSection[1];
|
||||
// process(downStart,downEnd,members,matchNums,infos);
|
||||
}
|
||||
int myscore = 0;
|
||||
if(myRank!=-1){
|
||||
myscore = RedisUtil.getInstence().getZSetScore(RedisKey.CAR_DEALY_RANK, "", String.valueOf(uid)).intValue();
|
||||
}
|
||||
Family.GetCarChallenegListResponse.Builder builder = Family.GetCarChallenegListResponse.newBuilder().setMyRank(myRank).setMyScore(myscore);
|
||||
for(ZsetTypedTupleWithRank typedTupleWithRankitem: infos){
|
||||
|
||||
for(ZsetTypedTupleWithRank typedTupleWithRankitem: beforeList){
|
||||
ZSetOperations.TypedTuple<String> item = typedTupleWithRankitem.getItem();
|
||||
int challenegUid = Integer.parseInt(item.getValue());
|
||||
int rank = typedTupleWithRankitem.getRank();
|
||||
|
@ -112,7 +157,7 @@ public class GetCarChallengeListHandler extends BaseHandler {
|
|||
int rank=start+1;
|
||||
Set<ZSetOperations.TypedTuple<String>> zsetreverseRangeWithScores = RedisUtil.getInstence().getZsetreverseRangeWithScores(RedisKey.CAR_DEALY_RANK, "", start, end);
|
||||
for(ZSetOperations.TypedTuple<String> item : zsetreverseRangeWithScores){
|
||||
if(members.add(Integer.parseInt(item.getValue()))){
|
||||
if(!members.contains(Integer.parseInt(item.getValue()))){
|
||||
infos.add(new ZsetTypedTupleWithRank(item,rank));
|
||||
}
|
||||
rank++;
|
||||
|
|
Loading…
Reference in New Issue