From 1af270944c4476b032a62fde994fd69808afe4ab Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 29 Oct 2021 17:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=97=E6=B5=AE=E4=BA=89=E9=94=8B=EF=BC=8C?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E5=8F=82=E6=95=B0{state}=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=88=B0redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/db/redis/RedisKey.java | 2 + .../GetWorldArenaChallengeRequestHandler.java | 1 - .../gtw/GetWorldArenaInfoRequestHandler.java | 4 +- .../ljsd/jieling/logic/arena/ArenaLogic.java | 56 +++++++++---------- .../com/ljsd/jieling/util/MessageUtil.java | 2 +- 5 files changed, 30 insertions(+), 35 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index 810f7b807..155653409 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -336,6 +336,8 @@ public class RedisKey { // 跨服 排行 public static final String CROSS_SERVICE_ARENA = "CROSS_SERVICE_ARENA"; + // 跨服 挑战状态 + public static final String CROSS_SERVICE_ARENA_STATE = "CROSS_SERVICE_ARENA_STATE"; //跨服机器人信息 public static final String CROSS_ARENA_ROBOT_INFO = "CROSS_ARENA_ROBOT_INFO"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java index fab7cb267..a2531b4e8 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/gtw/GetWorldArenaChallengeRequestHandler.java @@ -121,7 +121,6 @@ public class GetWorldArenaChallengeRequestHandler extends BaseHandler setting.getRestTime()[0] && diff < setting.getRestTime()[1]) { @@ -109,7 +109,7 @@ public class GetWorldArenaInfoRequestHandler extends BaseHandler arenaEnemyList = ArenaLogic.randomRank(iSession.getUid(), score == -1 ? 9999 : (int) score,crossGroup); builder1.addAllArenaEnemys(arenaEnemyList); }else{ diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index e38baeaef..d3a473c12 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -71,8 +71,6 @@ public class ArenaLogic { private int curSeason; private int viewSeason; - - private static int state = 0; public final static int NORMAL_STATE = 1; public final static int BATTLE_STATE = 2; public final static int RELAX_STATE = 3; @@ -718,22 +716,24 @@ public class ArenaLogic { } public void worldSendReward(){ - checkState(); - } - public static int getState() { - return state; + public int getState() { + String key = RedisUtil.getInstence().getKey(RedisKey.CROSS_SERVICE_ARENA_STATE, ""); + return Optional.ofNullable(RedisUtil.getInstence().get(key)) + .map(v->Integer.valueOf(v.toString())) + .orElse(0); } - public static void setState(int state) { - ArenaLogic.state = state; + public void setState(int state) { + String key = RedisUtil.getInstence().getKey(RedisKey.CROSS_SERVICE_ARENA_STATE, ""); + RedisUtil.getInstence().set(key,String.valueOf(state)); } private void b2r(){ - if(state != RELAX_STATE){ - if(state==BATTLE_STATE){ + if(getState() != RELAX_STATE){ + if(getState()==BATTLE_STATE){ Map sessionMap = OnlineUserManager.sessionMap; for(Map.Entry entry:sessionMap.entrySet()){ MessageUtil.sendIndicationMessage(entry.getValue(),1,MessageTypeProto.MessageType.GetWorldArenaInfoIndication_VALUE,null,true); @@ -748,7 +748,7 @@ public class ArenaLogic { TreeMap rewardMapByRank = SMServerArenaReward.rewardMapByRank; Set> rankInfo= rank.getRankByKey(String.valueOf(crossGroup), 0, -1); - int index = 0; + int index = 0; Iterator> iterator = rankInfo.iterator(); while (iterator.hasNext()){ index++; @@ -758,7 +758,7 @@ public class ArenaLogic { continue; } try { - User user = UserManager.getUser(uid, true); + User user = UserManager.getUserNotCache(uid); if(user==null){ continue; } @@ -780,34 +780,31 @@ public class ArenaLogic { e.printStackTrace(); } } - try { MongoUtil.getLjsdMongoTemplate().lastUpdate(); } catch (Exception e) { e.printStackTrace(); } } - LOGGER.info("罗浮争霸:转到休息状态,nowstate:{} to RELAX_STATE",state); - setState(RELAX_STATE); - + LOGGER.info("罗浮争霸:转到休息状态,nowstate:{} to RELAX_STATE",getState()); + getInstance().setState(RELAX_STATE); } } public void r2e(){ - - if(state != NORMAL_STATE){ - LOGGER.info("罗浮争霸:转到未开始状态,nowstate:{} to NORMAL_STATE",state); - setState(NORMAL_STATE); + if(getState() != NORMAL_STATE){ + LOGGER.info("罗浮争霸:转到未开始状态,nowstate:{} to NORMAL_STATE",getState()); + getInstance().setState(NORMAL_STATE); } } public void e2b(){ - if(state != BATTLE_STATE){ - LOGGER.info("罗浮争霸:转到战斗状态,nowstate:{} to BATTLE_STATE",state); - if(state!=0){ - initRank(); - } - setState(BATTLE_STATE); + if(getState() != BATTLE_STATE){ + LOGGER.info("罗浮争霸:转到战斗状态,nowstate:{} to BATTLE_STATE",getState()); +// if(getState()!=0){ +// initRank(); +// } + getInstance().setState(BATTLE_STATE); initRank(); Map sessionMap = OnlineUserManager.sessionMap; for(Map.Entry entry:sessionMap.entrySet()){ @@ -817,7 +814,6 @@ public class ArenaLogic { } private void checkState(){ - long now = System.currentTimeMillis(); TimeControllerOfFunction timeControllerOfFunction = GlobalDataManaager.getInstance().getTimeControllerOfFunctionByFunctinoType(FunctionIdEnum.World_Arena); if(null ==timeControllerOfFunction){ return; @@ -831,8 +827,8 @@ public class ArenaLogic { } else if (diff > setting.getRestTime()[1]) { r2e(); } - } + static List randomCrossRobot(int start, int end, int nums) { List robotIds = new LinkedList<>(); int index = 0; @@ -850,11 +846,9 @@ public class ArenaLogic { //初始化机器人信息 private void initRank(){ int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup(); - if(crossGroup==-1){ return; } - //分布式锁,保证一个组只有一个服进行初始化 boolean lock = RedisUtil.getInstence().lock("WORLD_ARENA_INIT_RANK:" + crossGroup, TimeUtils.ONE_MINUTE * 5); if(!lock){ @@ -875,7 +869,7 @@ public class ArenaLogic { List groupList = new ArrayList<>(8); groupValues.forEach((k,v)->{ - if(v==crossGroup) groupList.add(k); + if(v==crossGroup){ groupList.add(k);} }); int[] fightArea = STableManager.getConfig(SMServerArenaSetting.class).get(1).getFightArea(); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java index 154826070..d88fe03b6 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java @@ -126,7 +126,7 @@ public class MessageUtil { if(redType == GlobalsDef.MAIL_RED_TYPE){ return; } - User user = UserManager.getUserInMem(sendUid); + User user = UserManager.getUserNotCache(sendUid); if (user == null){ LOGGER.error("发送红点报错,uid:{},type:{}",sendUid,redType); return;