https://kwaksh2319.tistory.com/1004
웹소켓통신 서버 이용하여 간단한 채팅방 만들기2
https://kwaksh2319.tistory.com/1003 웹소켓통신 서버 이용하여 간단한 채팅방 만들기1구조 : STOMPSTOMP은 **"Simple (or Streaming) Text Oriented Messaging Protocol"**의 약자입니다. 웹소켓(WebSocket)을 사용할 때 메시지를
kwaksh2319.tistory.com
이번에 조금 변경해서 ui/ux 조금 수정을 하고 채팅방까지 구현했습니다.
그리고 채팅로그가 남도록했습니다. 화면있고 코드도 간단히 설명하겠습니다.
화면:


메세지를 보내면 저장하도록 변경했습니다.
@Override
public void sendMessage(@DestinationVariable Long roomId, MessageDTO message, StompHeaderAccessor headerAccessor) {
String clientIp = (String) headerAccessor.getSessionAttributes().get("ipAddress");
if (clientIp == null) {
clientIp = "unknown"; // 기본값 설정
}
try{
Optional<Room> room =roomService.findById(roomId);
if(room.isPresent()){
Message messageEntity = Message.builder()
.room(room.get())
.sender(message.getSender())
.text(message.getContent())
.ip(clientIp)
.build();
messageRepository.save(messageEntity);
String destination = "/topic/room/" + roomId; // 방 ID 경로
messagingTemplate.convertAndSend(destination, message); // 해당 방의 사용자들에게 메시지 전송
} else {
// 예외를 던지면, 아래 @MessageExceptionHandler가 처리합니다.
throw new IllegalArgumentException("메세지를 보낼 수 없습니다. 올바른 방이 아닙니다.");
}
}catch (Exception e){
log.error("message table save error");
}
}
그리고 방을 접속할때 메세지들을 가져옵니다.
@Override
public Page<MessageDTO> findAll(@Param("roomId") Long roomId) {
int pageSize=100;
int pageNumber=0;
Page<MessageDTO> messageDTOPage=null;
try {
Page<Message> messages =messageRepository.findAll(roomId,PageRequest.of(pageNumber, pageSize, Sort.by("createdAt").ascending()));
messageDTOPage = messages.map(message ->
MessageDTO.builder()
.content(message.getText())
.sender(message.getSender())
.build());
}catch (Exception e){
log.error("message table get content error or roomid not convert string");
}
return messageDTOPage;
}
'웹 > Spring vue 웹 개발' 카테고리의 다른 글
웹소켓통신 서버 이용하여 간단한 채팅방 만들기2 (0) | 2025.02.05 |
---|---|
웹소켓통신 서버 이용하여 간단한 채팅방 만들기1 (0) | 2025.01.26 |
간단한 주식 사이트 만들어보기01 (3) | 2024.10.15 |
웹소켓 통신 인터페이스 만들기 (2) | 2024.10.09 |
JWT- Swagger에 적용 (0) | 2024.01.27 |