update 聊天室功能,图片改url

This commit is contained in:
yyb 2025-05-27 17:50:50 +08:00
parent 65bd4c90c1
commit f65f08d1a6
3 changed files with 65 additions and 5 deletions

View File

@ -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( "消息格式错误");
}
}

View File

@ -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<String, String> 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<ChatRoom>()
.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);
//}
/**
* 构建聊天实时返回信息

View File

@ -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;
}