From 43883d4722184dac11fd31416f3b4db84686c9fe Mon Sep 17 00:00:00 2001 From: wangyuan Date: Tue, 27 Aug 2019 17:38:22 +0800 Subject: [PATCH] reconnect --- .../network/server/ProtocolsManager.java | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 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 17bc41b04..f14410cdc 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 @@ -2,44 +2,31 @@ package com.ljsd.jieling.network.server; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.google.protobuf.GeneratedMessage; -import com.google.protobuf.InvalidProtocolBufferException; + import com.ljsd.GameApplication; -import com.ljsd.common.mogodb.LjsdMongoTemplate; import com.ljsd.jieling.battle.actor.Scene; import com.ljsd.jieling.battle.actor.StateType; import com.ljsd.jieling.battle.room.SceneManager; -import com.ljsd.jieling.config.SGlobalSystemConfig; -import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.core.HandlerLogicThread; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.exception.ErrorCode; -import com.ljsd.jieling.globals.Global; import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.ktbeans.KtEventUtils; import com.ljsd.jieling.ktbeans.parmsBean.ParamEventBean; import com.ljsd.jieling.logic.OnlineUserManager; import com.ljsd.jieling.logic.activity.ActivityLogic; import com.ljsd.jieling.logic.activity.ActivityType; -import com.ljsd.jieling.logic.dao.LevelDifficulty; import com.ljsd.jieling.logic.dao.PlayerManager; import com.ljsd.jieling.logic.dao.UserManager; -import com.ljsd.jieling.logic.dao.root.GuildLog; import com.ljsd.jieling.logic.dao.root.User; import com.ljsd.jieling.logic.family.GuildLogic; -import com.ljsd.jieling.logic.fight.CombatLogic; -import com.ljsd.jieling.logic.room.Room; -import com.ljsd.jieling.logic.room.RoomManager; -import com.ljsd.jieling.logic.room.RoomPlayerInfo; 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; import com.ljsd.jieling.protocols.MessageTypeProto; -import com.ljsd.jieling.protocols.RoomFightProto; import com.ljsd.jieling.session.GameSession; import com.ljsd.jieling.util.MathUtils; import com.ljsd.jieling.util.MessageUtil; @@ -47,9 +34,6 @@ import com.ljsd.jieling.util.TimeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import sun.misc.BASE64Encoder; - -import java.io.*; import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -130,6 +114,7 @@ public class ProtocolsManager implements ProtocolsAbstract { iSession.setHeartBreatNums(heartBreatNums); } Gson gson = new Gson(); + @Override public void processMessage(GameSession gameSession, Object obj) { @@ -202,6 +187,13 @@ public class ProtocolsManager implements ProtocolsAbstract { // MessageUtil.sendErrorCode(session,0,"您的账号token不正确,请退出游戏重新登陆!"); // return; // } + + if( packetNetData.getMsgId()== MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE){ + processReconnect(session); + LOGGER.info("the uid={} process reconnect",session.getUid()); + return; + } + if (checkIndex(session,packetNetData) != 0){ return; } @@ -209,11 +201,6 @@ public class ProtocolsManager implements ProtocolsAbstract { if(b){ return; } - if( packetNetData.getMsgId()== MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE){ - processReconnect(session); - return; - } - //LOGGER.info("process the uid={},the msg={},the index={}",packetNetData.getUserId(), MessageTypeProto.MessageType.valueOf(packetNetData.getMsgId()),packetNetData.getIndex()); BaseHandler baseHandler = handlers.get(packetNetData.getMsgId()); if (baseHandler == null) { LOGGER.info("request unknow commond : " + packetNetData.getMsgId()); @@ -243,12 +230,13 @@ public class ProtocolsManager implements ProtocolsAbstract { public void processReconnect(ISession session){ String key = RedisUtil.getInstence().getKey(RedisKey.INDICATION_OFFLINE, Integer.toString(session.getUid())); Type type = new TypeToken>(){}.getType(); - Map map= gson.fromJson(RedisUtil.getInstence().get(key).toString(),type); + Object indicationInRedis = RedisUtil.getInstence().get(key); int maxMsgId = 0; - if(map!=null && map.isEmpty()){ + if(indicationInRedis!=null){ + Map map= gson.fromJson(indicationInRedis.toString(),type); for(Map.Entry info : map.entrySet()){ Integer msgIndex = info.getKey(); - session.writeAndFlush(info.getValue()); + session.writeAndFlush(info.getValue().getMsg()); session.putBackIndicationToMap(msgIndex,info.getValue().getMsg()); if(maxMsgId>(){}.getType(); - Map response = gson.fromJson(RedisUtil.getInstence().get(key).toString(), type); + Object responsInRedis = RedisUtil.getInstence().get(key); session.setFiveReady(1); session.updateIndicationIndex(maxMsgId); - if(response!=null&&!response.isEmpty()){ - session.setIndexToMessage(new ConcurrentHashMap (response)); - session.setIndex(response.keySet().iterator().next()); - RedisUtil.getInstence().del(key); + if(responsInRedis!=null){ + Map response = gson.fromJson(responsInRedis.toString(), type); + if(response!=null && !response.isEmpty()){ + session.setIndexToMessage(new ConcurrentHashMap (response)); + Integer index = response.keySet().iterator().next(); + session.setIndex(index); + RedisUtil.getInstence().del(key); + LOGGER.info("the uid={} cache repsponse is ={},session={}",session.getUid(),index,session.getCtx().channel()); + } + } MessageUtil.sendMessageWithoutBack(session,1, MessageTypeProto.MessageType.RECONNECT_RESPONSE_VALUE,null,true); } @@ -308,11 +301,12 @@ public class ProtocolsManager implements ProtocolsAbstract { int index = packetNetData.getIndex(); if (iSession.getIndex() >= index){ byte[] message = iSession.getCacheMessage(index); - if (message==null && packetNetData.getMsgId() != 11100){ + if (message==null &&( packetNetData.getMsgId() != MessageTypeProto.MessageType.LOGIN_REQUEST_VALUE || packetNetData.getMsgId() != MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE)){ //TODO error LOGGER.info("the uid={},the msg={} is processing",iSession.getUid(), MessageTypeProto.MessageType.valueOf(packetNetData.getMsgId())); return 1; }else { + LOGGER.info("the uid={},the msg={} reback",iSession.getUid(), MessageTypeProto.MessageType.valueOf(packetNetData.getMsgId())); iSession.writeAndFlush(message); return 1; }