From bdc84eb2fcacdbc9bccb22e17c14e84759113d66 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 23 Sep 2019 17:20:02 +0800 Subject: [PATCH 1/3] reconnect --- bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java | 1 + .../src/main/java/com/ljsd/jieling/db/redis/RedisKey.java | 1 + .../main/java/com/ljsd/jieling/logic/friend/FriendLogic.java | 3 ++- .../src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java index d10b78f35..7de27daca 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/actor/Scene.java @@ -403,6 +403,7 @@ public class Scene implements Runnable{ } } SceneManager.clearScene(roomId); + RedisUtil.getInstence().del( "MATCH_ROOM_KEY:" + roomId); } 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 838e5e086..9902cad05 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 @@ -158,6 +158,7 @@ public class RedisKey { //掉线缓存indication public static final String INDICATION_OFFLINE = "INDICATION_OFFLINE"; + public static final String INDICATION_OFFLINE_INDEX = "INDICATION_OFFLINE_INDEX"; public static final String INDICATION_OFFLINE_BLOODY = "INDICATION_OFFLINE_BLOODY"; public static final String RESPONSE_OFFLINE = "RESPONSE_OFFLINE"; diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java index 84e95d2d5..d2eba2101 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java @@ -228,7 +228,8 @@ public class FriendLogic { continue; } if (friends1.size() >= maxFriends){ - continue; + MessageUtil.sendErrorResponse(iSession,Global.SHOW_TIPS_ERROR,msgId,"对方好友已达上限"); + return; } if (applyFriends.size()>= maxApplyFriends){ applyFriends.remove(0); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java index e4ac7617e..81ec7a9eb 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/store/StoreLogic.java @@ -129,7 +129,7 @@ public class StoreLogic { while(it.hasNext()){ StoreInfo storeInfo = it.next().getValue(); SStoreTypeConfig sStoreTypeConfig = SStoreTypeConfig.getsStoreTypeConfigMap().get(storeInfo.getId()); - if (sStoreTypeConfig.getStoreOpenRule() ==2){ + if (sStoreTypeConfig.getStoreOpenRule() ==2 || sStoreTypeConfig.getStoreOpenRule() ==5){ if (nowTime > storeInfo.getEndTime()){ removeStoreIds.add(storeInfo.getId()); } From eb6cf6f62bef0cdb2a064f10a7e462297830c378 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 23 Sep 2019 17:39:25 +0800 Subject: [PATCH 2/3] reconnect --- .../network/server/ProtocolsManager.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java index 4256479cb..fca30ea1f 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/network/server/ProtocolsManager.java @@ -20,6 +20,7 @@ import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildLogic; import com.ljsd.jieling.netty.cocdex.PacketNetData; +import com.ljsd.jieling.netty.cocdex.Tea; import com.ljsd.jieling.netty.handler.GameMessageHandler; import com.ljsd.jieling.network.session.ISession; import com.ljsd.jieling.protocol.ProtocolsAbstract; @@ -27,6 +28,7 @@ import com.ljsd.jieling.protocols.MessageTypeProto; import com.ljsd.jieling.session.GameSession; import com.ljsd.jieling.util.MathUtils; import com.ljsd.jieling.util.MessageUtil; +import com.ljsd.jieling.util.StringUtil; import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -233,14 +235,23 @@ public class ProtocolsManager implements ProtocolsAbstract { Map map= gson.fromJson(indicationInRedis.toString(),type); for(Map.Entry info : map.entrySet()){ session.writeAndFlush(info.getValue().getMsg()); - session.putBackIndicationToMap(maxMsgId++,info.getValue().getMsg()); + session.putBackIndicationToMap(info.getKey(),info.getValue().getMsg()); + if(info.getKey()>maxMsgId){ + maxMsgId = info.getKey(); + } } - RedisUtil.getInstence().del(key); + RedisUtil.getInstence().del(key); } key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid())); type = new TypeToken>(){}.getType(); Object responsInRedis = RedisUtil.getInstence().get(key); session.setFiveReady(1); + String indicationIndexInRedisKey = RedisUtil.getInstence().getKey(RedisKey.INDICATION_OFFLINE_INDEX, Integer.toString(session.getUid())); + String indicationIndexInRedis =(String) RedisUtil.getInstence().get(indicationIndexInRedisKey); + if(!StringUtil.isEmpty(indicationIndexInRedis)){ + maxMsgId= Integer.parseInt(indicationIndexInRedis); + } + session.updateIndicationIndex(maxMsgId); if(responsInRedis!=null){ Map response = gson.fromJson(responsInRedis.toString(), type); @@ -391,12 +402,15 @@ public class ProtocolsManager implements ProtocolsAbstract { private void backUpMsgToRedis(ISession session){ ConcurrentHashMap indexToIndication = session.getIndexToIndication(); + LOGGER.info("the uid={} offline.the indication size={}",session.getUid(),indexToIndication.size()); if(!indexToIndication.isEmpty() ){ String key = RedisUtil.getInstence().getKey(RedisKey.INDICATION_OFFLINE, Integer.toString(session.getUid())); RedisUtil.getInstence().set(key,gson.toJson(indexToIndication)); } + String key = RedisUtil.getInstence().getKey(RedisKey.INDICATION_OFFLINE_INDEX, Integer.toString(session.getUid())); + RedisUtil.getInstence().set(key,String.valueOf(session.getIndicationIndex())); - String key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid())); + key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE, Integer.toString(session.getUid())); RedisUtil.getInstence().set(key,gson.toJson(session.getIndexToMessage())); } From 388b2e54951b61e6c9a694f765bc52ecccee0f71 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 23 Sep 2019 17:56:22 +0800 Subject: [PATCH 3/3] bloody --- .../com/ljsd/battle/room/BeanToProto.java | 9 ++++-- .../com/ljsd/battle/room/SceneManager.java | 31 ++----------------- .../parmsBean/ParamEnvironmentSimpleBean.java | 8 ++--- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java b/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java index ead6dc683..5900f48ac 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/room/BeanToProto.java @@ -94,12 +94,15 @@ public class BeanToProto { Integer value = item.getValue(); builder.addPosMineral(CommonProto.PosMineral.newBuilder().setPos(key).setNums(value).build()); } - long endTime = SBloodyBattleSetting.sBloodyBattleSetting.getBattleTime(); + long startTime = scene.getStartTime(); + if(startTime==0){ + startTime = System.currentTimeMillis(); + } + long endTime = SBloodyBattleSetting.sBloodyBattleSetting.getBattleTime()*1000+startTime; if(scene.getQuickEnd()!=-1){ - long startTime = scene.getStartTime(); endTime = startTime + scene.getQuickEnd()*50; } - int remainTime = SBloodyBattleSetting.sBloodyBattleSetting.getBattleTime() - (int)((System.currentTimeMillis() - scene.getStartTime()) / 1000); + int remainTime =(int)((endTime - System.currentTimeMillis() - scene.getStartTime()) / 1000); builder.setRemainTime(remainTime); builder.addAllBarrierPoint(SceneManager.bloodyMap.getBarrierPoints()); return builder.build(); diff --git a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java index 0be9eaab0..8602ea82f 100644 --- a/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java +++ b/bloodybattle/src/main/java/com/ljsd/battle/room/SceneManager.java @@ -56,7 +56,7 @@ public class SceneManager { Map.Entry next = iterator.next(); Integer roomId = next.getKey(); Long time = next.getValue(); - if(time - now > sBloodyBattleSetting.getReloadTime() * 1000){ + if(now-time > sBloodyBattleSetting.getReloadTime() * 1000){ iterator.remove(); Scene scene = sceneMap.get(roomId); if(scene!=null){ @@ -66,7 +66,7 @@ public class SceneManager { } } } - Thread.sleep(1000); + Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } @@ -123,7 +123,6 @@ public class SceneManager { scene.setRoomId(room.getId()); SBloodyBattleSetting sBloodyBattleSetting = SBloodyBattleSetting.sBloodyBattleSetting; for(Integer uid : room.fightPlayer){ - //todo 设置用户在战斗房间中 取消用户匹配信息 获取用户快照信息 String key = RedisUtil.getInstence().getKey(RedisKey.BLOODY_TEAM, Integer.toString(uid)); UserBloodySnpInfo userBloodySnpInfo =RedisUtil.getInstence().getObject(key,UserBloodySnpInfo.class); BattleManager.putUserFightInfo(userBloodySnpInfo); @@ -145,6 +144,7 @@ public class SceneManager { createMonster(scene,-1); sceneMap.put(room.getId(),scene); + readyRunTaskMap.put(room.getId(),System.currentTimeMillis()); } @@ -384,11 +384,6 @@ public class SceneManager { MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "没有在房间中"); return; } - /* if(sceneMap.containsKey(scene.getRoomId())){ - //房间已经销毁,如果走到这一步,说明其他地方有错了 - MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "房间已经销毁"); - return; - }*/ MessageUtil.sendRoomStartGameReadyResponse(iSession, responseMsgId, 1); @@ -457,24 +452,4 @@ public class SceneManager { scene.getSceneActorMap().get(uid).setGameState(StateType.UNREADY_STATE); } } - - - - static class ReadySceneTask{ - private Scene scene; - private long startTime; - - public ReadySceneTask(Scene scene, long startTime) { - this.scene = scene; - this.startTime = startTime; - } - - public Scene getScene() { - return scene; - } - - public long getStartTime() { - return startTime; - } - } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/parmsBean/ParamEnvironmentSimpleBean.java b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/parmsBean/ParamEnvironmentSimpleBean.java index 434fa0f63..1be81aa48 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/parmsBean/ParamEnvironmentSimpleBean.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/ktbeans/parmsBean/ParamEnvironmentSimpleBean.java @@ -4,7 +4,7 @@ public class ParamEnvironmentSimpleBean extends ParamEnvironmentBean{ private String idfa_s; // ios设备唯一标识,必须添加该字段 private String imei_s;// 安卓设备唯一标识,必须添加该字段 - private String app_device_id_s; + private String device_id_s; private String brand_s; private String dpi_s; private String operator_s; @@ -20,7 +20,7 @@ public class ParamEnvironmentSimpleBean extends ParamEnvironmentBean{ } public String getApp_device_id_s() { - return app_device_id_s; + return device_id_s; } public String getBrand_s() { @@ -52,7 +52,7 @@ public class ParamEnvironmentSimpleBean extends ParamEnvironmentBean{ } public void setApp_device_id_s(String app_device_id_s) { - this.app_device_id_s = app_device_id_s; + this.device_id_s = app_device_id_s; } public void setBrand_s(String brand_s) { @@ -78,7 +78,7 @@ public class ParamEnvironmentSimpleBean extends ParamEnvironmentBean{ public ParamEnvironmentSimpleBean(String idfa_s, String imei_s, String app_device_id_s, String brand_s, String dpi_s, String operator_s, String os_version_s, boolean wifi_b) { this.idfa_s = idfa_s; this.imei_s = imei_s; - this.app_device_id_s = app_device_id_s; + this.device_id_s = app_device_id_s; this.brand_s = brand_s; this.dpi_s = dpi_s; this.operator_s = operator_s;