From eb6cf6f62bef0cdb2a064f10a7e462297830c378 Mon Sep 17 00:00:00 2001 From: wangyuan Date: Mon, 23 Sep 2019 17:39:25 +0800 Subject: [PATCH] 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())); }