From 6db9f1a7b4993745ac5dcff6deb1475a27b256fb Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Thu, 17 Apr 2025 11:20:53 +0800 Subject: [PATCH] =?UTF-8?q?update=20websocket=20=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=A0=81=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../m2pool/chat/constant/ExceptionEnum.java | 38 +++++++++++++++++++ .../chat/coverter/CommonMessageConvert.java | 4 +- .../chat/exception/WebSocketException.java | 27 ------------- .../WebsocketChannelInterceptor.java | 16 ++++---- .../java/com/m2pool/chat/task/ChatTask.java | 1 - 5 files changed, 49 insertions(+), 37 deletions(-) create mode 100644 m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/ExceptionEnum.java delete mode 100644 m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/exception/WebSocketException.java diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/ExceptionEnum.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/ExceptionEnum.java new file mode 100644 index 0000000..e2e42e7 --- /dev/null +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/constant/ExceptionEnum.java @@ -0,0 +1,38 @@ +package com.m2pool.chat.constant; + +import lombok.Getter; + +/** + * @Enums ExceptionEnum + * @Description 自定义websocket 异常码枚举类 + * @Author yyb + * @Date 2025/4/17 10:18 + */ +@Getter +public enum ExceptionEnum { + IP_LIMIT_CONNECT(1020, "本机连接数已达上限,请关闭已有链接"), + MAX_LIMIT_CONNECT(1021, "服务器websocket连接数已达上限,服务器拒绝链接"), + SET_PRINCIPAL_FAIL(1022, "websocket链接异常,用户身份设置失败"), + GET_PRINCIPAL_FAIL(1023, "websocket链接异常,用户信息邮箱获取失败"), + ; + + private final int code; + private final String description; + + ExceptionEnum(int code, String description) { + this.code = code; + this.description = description; + } + + /** + * 根据枚举类,拼接一个返回给前端的状态信息 + * @param exceptionEnum 枚举类 + * @return 返回一个状态信息,供前端解析 + */ + public static String fromCode(ExceptionEnum exceptionEnum) { + int code = exceptionEnum.getCode(); + String description = exceptionEnum.getDescription(); + return code+","+description; + } + +} diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java index 4e7ae31..b323115 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/coverter/CommonMessageConvert.java @@ -1,8 +1,8 @@ package com.m2pool.chat.coverter; -import com.m2pool.chat.exception.WebSocketException; import com.m2pool.common.core.utils.JsonUtil; import org.springframework.messaging.Message; +import org.springframework.messaging.MessageDeliveryException; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.support.GenericMessage; @@ -29,7 +29,7 @@ public class CommonMessageConvert implements MessageConverter { String textPayload = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8); return JsonUtil.convertString2Object(textPayload,targetClass); } catch (Exception e) { - throw new WebSocketException( "消息格式错误"); + throw new MessageDeliveryException( "消息格式错误"); } } return null; diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/exception/WebSocketException.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/exception/WebSocketException.java deleted file mode 100644 index 999538b..0000000 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/exception/WebSocketException.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.m2pool.chat.exception; - -import com.m2pool.common.core.exception.base.BaseException; - -public class WebSocketException extends BaseException { - - public WebSocketException(String module, String code, Object[] args, String defaultMessage) { - super(module, code, args, defaultMessage); - } - - public WebSocketException(String module, String code, Object[] args) { - super(module, code, args); - } - - public WebSocketException(String module, String defaultMessage) { - super(module, defaultMessage); - } - - public WebSocketException(String code, Object[] args) { - super(code, args); - } - - public WebSocketException(String defaultMessage) { - super(defaultMessage); - } - -} diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java index 078319b..f9c6d2a 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/interceptor/WebsocketChannelInterceptor.java @@ -2,6 +2,7 @@ package com.m2pool.chat.interceptor; import com.m2pool.chat.config.CustomWebSocketConfig; +import com.m2pool.chat.constant.ExceptionEnum; import com.m2pool.chat.entity.StompPrincipal; import lombok.Data; import org.slf4j.Logger; @@ -67,6 +68,9 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); if (accessor.getCommand() == StompCommand.CONNECT ) { StompHeaderAccessor mha = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); + if(mha == null){ + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.SET_PRINCIPAL_FAIL)); + } Object raw = message.getHeaders().get(SimpMessageHeaderAccessor.NATIVE_HEADERS); int type = Integer.parseInt(getConnectCustomHeaders(raw, TYPE)); String email = getConnectCustomHeaders(raw, EMAIL); @@ -76,9 +80,7 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { //根据客服端ip + 用户类型限制连接数 ipLimit(accessor,type); - if(mha == null){ - throw new MessageDeliveryException("get MessageHeaderAccessor failed,can not set Principal,connect failed"); - } + //链接请求头中用户信息存入stomp中 mha.setUser(new StompPrincipal(email,type)); } @@ -107,7 +109,7 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { private void maxConnectionsLimit(){ if(connectionCount.incrementAndGet() >= customWebSocketConfig.getMaxConnections()){ LOGGER.info("reach max connections,refuse connect"); - throw new MessageDeliveryException("reach max connections,refuse connect"); + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.MAX_LIMIT_CONNECT)); } } @@ -120,11 +122,11 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { if (sessionAttributes != null) { String ipAddr = (String) sessionAttributes.get(IPADDR); if(type != CUSTOMER && ipConnectionCountMap.get(ipAddr) != null){ - throw new MessageDeliveryException("this ip maximum number of connections is reached"); + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.IP_LIMIT_CONNECT)); } ipConnectionCountMap.put(ipAddr,true); }else{ - throw new MessageDeliveryException("not find email and type headers"); + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.GET_PRINCIPAL_FAIL)); } } @@ -159,7 +161,7 @@ public class WebsocketChannelInterceptor implements ChannelInterceptor { ipConnectionCountMap.remove(ipAddr); } }else{ - throw new MessageDeliveryException("not find email and type headers"); + throw new MessageDeliveryException(ExceptionEnum.fromCode(ExceptionEnum.GET_PRINCIPAL_FAIL)); } } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/task/ChatTask.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/task/ChatTask.java index 104e353..13f3e91 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/task/ChatTask.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/task/ChatTask.java @@ -9,5 +9,4 @@ package com.m2pool.chat.task; public class ChatTask { - }