From d809b04af59be7780d8b80479e735a7bb315375e Mon Sep 17 00:00:00 2001 From: mashiyu Date: Tue, 22 Jan 2019 13:55:52 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ljsd/jieling/exception/ErrorCode.java | 10 +++++++ .../ljsd/jieling/logic/CalHeroFinalAttri.java | 3 ++ .../ljsd/jieling/logic/OnlineUserManager.java | 7 ++--- .../network/server/ProtocolsManager.java | 22 +++++++++----- .../com/ljsd/jieling/util/MessageUtil.java | 29 ++++++++++--------- 5 files changed, 45 insertions(+), 26 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java index 9a626ac54..719917d00 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/exception/ErrorCode.java @@ -2,4 +2,14 @@ package com.ljsd.jieling.exception; public class ErrorCode { + //系统错误 + public static final int sysErrorCode = -100; + + //重复登陆 + public static final int reloginCode = -101; + + //踢用户下线 + public static final int kickUserCode = -102; + + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/CalHeroFinalAttri.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/CalHeroFinalAttri.java index 3f9c2a9e2..aab94fc8b 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/CalHeroFinalAttri.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/CalHeroFinalAttri.java @@ -12,4 +12,7 @@ public class CalHeroFinalAttri { + + + } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java index adfd5db36..23083ccee 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/OnlineUserManager.java @@ -8,19 +8,16 @@ import java.util.concurrent.ConcurrentHashMap; public class OnlineUserManager { - public static Map onlineUidMap = new ConcurrentHashMap<>(); public static Map sessionMap = new ConcurrentHashMap<>(); public static Map onlineUserMap = new ConcurrentHashMap<>(10000); - public static void registUser(int uid, int serverId, ISession session) { - onlineUidMap.put(uid, serverId); + public static void userOnline(int uid, ISession session) { sessionMap.put(uid, session); } - public static void unRegistUser(int uid) { - onlineUidMap.remove(uid); + public static void userOffline(int uid) { sessionMap.remove(uid); } 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 8bbe0953b..621465ec6 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 @@ -3,7 +3,11 @@ package com.ljsd.jieling.network.server; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.MessageLite; import com.ljsd.GameApplication; +import com.ljsd.jieling.exception.ErrorCode; import com.ljsd.jieling.handler.BaseHandler; +import com.ljsd.jieling.logic.OnlineUserManager; +import com.ljsd.jieling.logic.dao.User; +import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.netty.cocdex.PacketNetData; import com.ljsd.jieling.netty.handler.GameMessageHandler; import com.ljsd.jieling.network.session.ISession; @@ -207,7 +211,7 @@ public class ProtocolsManager implements ProtocolsAbstract { int resultCode = checkAndRefresh(session,packetNetData); if (resultCode != 0 ){ - MessageUtil.sendErrorCode(session); + MessageUtil.sendErrorCode(session,0); return; } @@ -251,8 +255,9 @@ public class ProtocolsManager implements ProtocolsAbstract { private int checkAndRefresh(ISession session, PacketNetData packetNetData) { int myToken = 0; - if (packetNetData.getMsgId()== MessageTypeProto.MessageType.LOGIN_REQUEST_VALUE){ + OnlineUserManager.userOnline(session.getUid(),session); + //TODO 更新token }else if (packetNetData.getMsgId()== MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE){ //TODO 更新token @@ -260,6 +265,13 @@ public class ProtocolsManager implements ProtocolsAbstract { }else { } + + if (OnlineUserManager.checkUidOnline(session.getUid())){ + ISession iSession = OnlineUserManager.getSessionByUid(session.getUid()); + MessageUtil.sendErrorCode(session, ErrorCode.reloginCode); + iSession.close(); + } + // if (myToken != packetNetData.getToken()){ // return 1; // } @@ -295,14 +307,10 @@ public class ProtocolsManager implements ProtocolsAbstract { return; } - if (nowSession != null) { - LOGGER.error("offLine->uid={},session={},nowUid={},nowSession={}", - session.getUid(), session, nowSession.getUid(), nowSession); - } GameMessageHandler.currentSessions.remove(session.getUid()); try { - + OnlineUserManager.userOffline(session.getUid()); // 下线处理的逻辑需要添加在这里 } finally { //保证数据的保存 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 1f6451834..e125f5662 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java @@ -5,6 +5,7 @@ import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.netty.PackageConstant; import com.ljsd.jieling.netty.cocdex.Tea; import com.ljsd.jieling.network.session.ISession; +import com.ljsd.jieling.protocols.MessageTypeProto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,10 +44,14 @@ public class MessageUtil { } - public static void sendMessage(ISession session, int result, int msgId, GeneratedMessage generatedMessage, boolean flush) throws Exception { + public static void sendMessage(ISession session, int result, int msgId, GeneratedMessage generatedMessage, boolean flush) { byte[] byteBuf = wrappedBuffer(session.getUid(), session.getToken(), session.getIndex(), result, msgId, generatedMessage); - UserManager.ljsdMongoTemplate.lastUpdate(); - System.out.println("-----> msgId : "+ msgId+"; length : "+byteBuf.length+"; content : "+byteBuf); + try { + UserManager.ljsdMongoTemplate.lastUpdate(); + } catch (Exception e) { + e.printStackTrace(); + } +// System.out.println("-----> msgId : "+ msgId+"; length : "+byteBuf.length+"; content : "+byteBuf); if (flush) { session.writeAndFlush(byteBuf); } else { @@ -59,23 +64,19 @@ public class MessageUtil { + PackageConstant.MSG_ID_FIELD_LEN ; byte[] bytes = new byte[length]; int pos = 0; - Tea.intToByte(bytes, pos, 100001); + Tea.intToByte(bytes, pos, session.getUid()); pos += PackageConstant.UID_FIELD_LEN; - Tea.intToByte(bytes, pos, 123456); + Tea.intToByte(bytes, pos, session.getToken()); pos += PackageConstant.TOKEN_LEN; - Tea.intToByte(bytes, pos, 1001); + Tea.intToByte(bytes, pos, MessageTypeProto.MessageType.HEART_BEAT_RESPONSE_VALUE); byte[] byteBuf = Tea.encrypt2(bytes, Tea.KEY); session.writeAndFlush(byteBuf); } - public static void sendErrorCode(ISession session,int result,int msgId,String errMsg) throws Exception { - /* if(StringUtils.isEmpty(errMsg)){ - sendMessage(session, result, msgId, null, true); - }else{ - PlayerInfoProto.ErrorMsgResponse build = PlayerInfoProto.ErrorMsgResponse.newBuilder().setMsg(errMsg).build(); - sendMessage(session, result, msgId, build, true); - }*/ - + public static void sendErrorCode(ISession session,int errorCode) { + byte[] byteBuf = wrappedBuffer(session.getUid(), session.getToken(), session.getIndex(), + errorCode, MessageTypeProto.MessageType.ERROR_CODE_INDICATION_VALUE, null); + session.writeAndFlush(byteBuf); } // public static void sendErrorResponse(Msg msg, GeneratedMessage error_message, int msgId) throws Exception {