diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java index 8f0bdd11..880e7580 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/IMAction.java @@ -80,6 +80,11 @@ public class IMAction extends Action { if (userId == null) { sendResponse(response, ErrorCode.ERROR_CODE_TOKEN_ERROR, null); } else { + if(messagesStore.getUserStatus(userId) == ProtoConstants.UserStatus.Forbidden) { + sendResponse(response, ErrorCode.ERROR_CODE_USER_BLOCKED, null); + return true; + } + ServerAPIHelper.sendRequest(userId, wrapper.getClientId(), wrapper.getRequest(), wrapper.getData().toByteArray(), new ServerAPIHelper.Callback() { @Override public void onSuccess(byte[] result) { diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java index ec6c7d70..056481cf 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/RouteAction.java @@ -102,6 +102,10 @@ public class RouteAction extends Action { return true; } + if(messagesStore.getUserStatus(uid) == ProtoConstants.UserStatus.Forbidden) { + sendResponse(response, ErrorCode.ERROR_CODE_USER_BLOCKED, null); + return true; + } try { WFCMessage.IMHttpWrapper wrapper = WFCMessage.IMHttpWrapper.parseFrom(bytes); diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index a041adda..f0c799c8 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -108,7 +108,7 @@ public class ProtocolProcessor { ConnectionDescriptor descriptor = connectionDescriptors.getConnection(session.getClientID()); try { if (descriptor != null) { - processDisconnect(descriptor.getChannel(), true, false); + processDisconnect(descriptor.getChannel(), false, false); } } catch (InterruptedException e) { e.printStackTrace(); @@ -650,12 +650,22 @@ public class ProtocolProcessor { if(connectionDescriptors.removeConnection(oldConnDescr)) { m_interceptor.notifyClientConnectionLost(clientID, username); } + try { + channel.close(); + } catch (Exception e) { + e.printStackTrace(); + } }); } else { ConnectionDescriptor oldConnDescr = new ConnectionDescriptor(clientID, channel); if(connectionDescriptors.removeConnection(oldConnDescr)) { m_interceptor.notifyClientConnectionLost(clientID, username); } + try { + channel.close(); + } catch (Exception e) { + e.printStackTrace(); + } } } diff --git a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java index 4754f636..bf06db7e 100755 --- a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java +++ b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java @@ -77,7 +77,7 @@ public enum ErrorCode { ERROR_CODE_SENSITIVE_MATCHED(242, "sensitive matched"), ERROR_CODE_SIGN_EXPIRED(243, "sign expired"), ERROR_CODE_AUTH_FAILURE(244, "auth failure"), - ERROR_CODE_CLIENT_COUNT_OUT_OF_LIMIT(245, "client count out of limit"), + ERROR_CODE_USER_BLOCKED(245, "user is blocked"), ERROR_CODE_IN_BLACK_LIST(246, "user in black list"), ERROR_CODE_FORBIDDEN_SEND_MSG(247, "forbidden send msg globally"), ERROR_CODE_NOT_RIGHT(248, "no right to operate"),