From f65f08d1a636e4ef6506a7ca3459e233f692a9b1 Mon Sep 17 00:00:00 2001 From: yyb <1416014977@qq.com> Date: Tue, 27 May 2025 17:50:50 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=81=8A=E5=A4=A9=E5=AE=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=9B=BE=E7=89=87=E6=94=B9url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/coverter/CommonMessageConvert.java | 3 +- .../chat/service/impl/StompServiceImpl.java | 42 +++++++++++++++++-- .../com/m2pool/chat/vo/UserMessageVo.java | 25 +++++++++++ 3 files changed, 65 insertions(+), 5 deletions(-) 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 e7556ff..1b9e3fc 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 @@ -19,7 +19,7 @@ public class CommonMessageConvert implements MessageConverter { /** * 将客户端发送过来的消息转换为指定的对象 * @param message 客户端发送过来的消息 - * @param targetClass 目标数据类型 + * @param targetClass 目标数据类型 注意:这里的targetClass是消息对象,对应接口的@Payload 注解的类型,且里面序列化的字段必须一模一样。否则序列化报错 * @return 转换后的对象 */ @Override @@ -30,6 +30,7 @@ public class CommonMessageConvert implements MessageConverter { System.out.println("发送者发送到服务器的消息:"+textPayload); return JsonUtil.convertString2Object(textPayload,targetClass); } catch (Exception e) { + System.out.println("错误详情"+e); throw new MessageDeliveryException( "消息格式错误"); } } diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java index 4f3917b..5144bec 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/service/impl/StompServiceImpl.java @@ -23,6 +23,9 @@ import org.springframework.transaction.support.TransactionTemplate; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import static com.alibaba.nacos.client.utils.EnvUtil.LOGGER; import static com.m2pool.chat.constant.UserType.CUSTOMER; @@ -48,6 +51,12 @@ public class StompServiceImpl implements StompService { @Resource private CustomWebSocketConfig webSocketConfig; + + /** + * key 为发送者+接受者 ,value 为 图片内容 + */ + //private final ConcurrentHashMap imageContent = new ConcurrentHashMap<>(); + @Override public AjaxResult sendMessageToUser(StompPrincipal principal, UserMessageVo userMessageVo) { WebsocketMessageDto build = buildDto(principal, userMessageVo); @@ -58,9 +67,17 @@ public class StompServiceImpl implements StompService { build.setRoomId(String.valueOf(userMessageVo.getRoomId())); int serviceReadNum = chatRoom != null ? chatRoom.getClientReadNum() : 0; build.setClientReadNum( serviceReadNum+ 1); - //不在判断接收者是否在线 -// boolean bool = checkOnline(userMessageVo); - //在线用户才发送消息 + //分块传输,只有最后一个块拼接完成才能发送消息 + //if (userMessageVo.getCurrentChunk() == userMessageVo.getTotalChunks()-1){ + // build.setContent(handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent())); + // System.out.println("发送图片成功"+build.getContent()); + // messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_USER + "/" + userMessageVo.getEmail(),build); + // executeTran(principal, userMessageVo, chatRoom); + // imageContent.remove(userMessageVo.getEmail()+principal.getName()); + //}else{ + // handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent()); + //} + messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_USER + "/" + userMessageVo.getEmail(),build); executeTran(principal, userMessageVo, chatRoom); return AjaxResult.success("成功"); @@ -69,17 +86,34 @@ public class StompServiceImpl implements StompService { @Override public AjaxResult sendMessageToCustomer(StompPrincipal principal, UserMessageVo userMessageVo) { WebsocketMessageDto build = buildDto(principal, userMessageVo); - ChatRoom chatRoom = chatRoomMapper.selectOne(new LambdaQueryWrapper() .eq(ChatRoom::getUserOneEmail, userMessageVo.getEmail()) .eq(ChatRoom::getUserTwoEmail, principal.getName())); build.setRoomId(String.valueOf(userMessageVo.getRoomId())); int serviceReadNum = chatRoom != null ? chatRoom.getServiceReadNum() : 0; build.setClientReadNum(serviceReadNum + 1); + + //分块传输,只有最后一个块拼接完成才能发送消息 + //if (userMessageVo.getCurrentChunk() == userMessageVo.getTotalChunks()-1){ + // build.setContent(handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent())); + // messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_CUSTOMER + "/" + userMessageVo.getEmail(),build); + // executeTran(principal, userMessageVo, chatRoom); + // imageContent.remove(userMessageVo.getEmail()+principal.getName()); + //}else{ + // handleImage(userMessageVo.getEmail()+principal.getName(),userMessageVo.getContent()); + //} messagingTemplate.convertAndSendToUser(userMessageVo.getEmail(), Destination.QUEUE_CUSTOMER + "/" + userMessageVo.getEmail(),build); executeTran(principal, userMessageVo, chatRoom); + return AjaxResult.success("成功"); } + /** + * 分片图片处理 + * @return + */ + //private String handleImage(String key,String value){ + // return imageContent.compute(key, (k, s) -> s + value); + //} /** * 构建聊天实时返回信息 diff --git a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/UserMessageVo.java b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/UserMessageVo.java index a144507..d768759 100644 --- a/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/UserMessageVo.java +++ b/m2pool-modules/m2pool-chat/src/main/java/com/m2pool/chat/vo/UserMessageVo.java @@ -1,9 +1,14 @@ package com.m2pool.chat.vo; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.Date; + /** * @ClassName UserMessageVo * @Description 用户发送消息对象 @@ -43,4 +48,24 @@ public class UserMessageVo { */ @ApiModelProperty(value = "聊天室id", example = "1") private String roomId; + + ///** + // * 总的分片数 + // */ + //@ApiModelProperty(value = "总的分片数", example = "1",required = false) + //private Integer totalChunks; + ///** + // * 当前分片数 + // */ + //@ApiModelProperty(value = "当前分片数", example = "1",required = false) + //private Integer currentChunk; + // + ///** + // * 是否是第一个分片 + // */ + //@ApiModelProperty(value = "是否是第一个分片", example = "true",required = false) + //private Boolean isFirstChunk; + // + //@ApiModelProperty(value = "发送时间", example = "2025-05-27T15:39:29.221Z",required = false) + //private Date sendTime; }