Skip to content

Commit cc18b69

Browse files
authored
Merge pull request #128 from CommitField/fix-chat-websocket
Fix chat websocket
2 parents 5c9da66 + 9584ecd commit cc18b69

File tree

5 files changed

+30
-7
lines changed

5 files changed

+30
-7
lines changed

โ€Žsrc/main/java/cmf/commitField/domain/chat/chatMessage/controller/response/ChatMsgResponse.java

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
@AllArgsConstructor
1111
@Builder
1212
public class ChatMsgResponse {
13+
private Long chatMsgId;
1314
private Long roomId;
1415
//์‚ฌ์šฉ์ž(user)
1516
private String from;

โ€Žsrc/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public class ChatMessageServiceImpl implements ChatMessageService {
3333
private final ChatMessageCustomRepository chatMessageCustomRepository;
3434
private final UserChatRoomRepository userChatRoomRepository;
3535

36+
// ์ปค๋ฐ‹์šฉ ์ฃผ์„
37+
3638
@Override
3739
@Transactional
3840
public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roomId) {
@@ -48,14 +50,19 @@ public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roo
4850
.user(findUser)
4951
.chatRoom(chatRoom)
5052
.build();
51-
// Response
53+
54+
// ๋ฉ”์‹œ์ง€ ์ €์žฅ
55+
ChatMsg savedMsg = chatMessageRepository.save(chatMsg);
56+
57+
// Response - ๋ฉ”์‹œ์ง€ ID ์ถ”๊ฐ€
5258
ChatMsgResponse response = ChatMsgResponse.builder()
59+
.chatMsgId(savedMsg.getId()) // ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€์˜ ID ์ถ”๊ฐ€
5360
.roomId(roomId)
5461
.from(findUser.getNickname())
5562
.message(message.getMessage())
5663
.sendAt(chatMsg.getCreatedAt())
5764
.build();
58-
chatMessageRepository.save(chatMsg);
65+
5966
return response;
6067
}
6168

@@ -86,4 +93,4 @@ public List<ChatMsgDto> getRoomChatMsgList(Long roomId, Long userId, Long lastId
8693
}
8794
return chatMsgDtos;
8895
}
89-
}
96+
}

โ€Žsrc/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java

+19-4
Original file line numberDiff line numberDiff line change
@@ -173,14 +173,15 @@ private void handleChatMessage(WebSocketSession session, JsonNode jsonNode) {
173173
Long roomId = jsonNode.get("roomId").asLong();
174174
Long userId = jsonNode.get("userId").asLong();
175175
String message = jsonNode.get("message").asText();
176+
String from = jsonNode.has("from") ? jsonNode.get("from").asText() : null;
177+
178+
log.info("์ฑ„ํŒ… ๋ฉ”์‹œ์ง€: roomId={}, userId={}, message={}, from={}", roomId, userId, message, from);
176179

177180
if (message == null || message.trim().isEmpty()) {
178181
sendErrorMessage(session, "๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค.");
179182
return;
180183
}
181184

182-
log.info("์ฑ„ํŒ… ๋ฉ”์‹œ์ง€: roomId={}, userId={}, message={}", roomId, userId, message);
183-
184185
// ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฒ€์ฆ
185186
User user = userRepository.findById(userId).orElse(null);
186187
if (user == null) {
@@ -194,8 +195,20 @@ private void handleChatMessage(WebSocketSession session, JsonNode jsonNode) {
194195
ChatMsgRequest chatMsgRequest = new ChatMsgRequest(message);
195196
ChatMsgResponse response = chatMessageService.sendMessage(chatMsgRequest, userId, roomId);
196197

197-
// ๋ฉ”์‹œ์ง€ ํฌ๋งท ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†ก
198-
String messageJson = objectMapper.writeValueAsString(response);
198+
// ์›น์†Œ์ผ“ ๋ฉ”์‹œ์ง€ ํฌ๋งท ์ƒ์„ฑ (ํด๋ผ์ด์–ธํŠธ์™€ ์ผ์น˜์‹œํ‚ด)
199+
Map<String, Object> wsMessage = new HashMap<>();
200+
wsMessage.put("type", "CHAT");
201+
wsMessage.put("roomId", roomId);
202+
wsMessage.put("userId", userId);
203+
wsMessage.put("chatMsgId", response.getChatMsgId()); // DB์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€ ID ์ถ”๊ฐ€
204+
wsMessage.put("from", response.getFrom());
205+
wsMessage.put("nickname", response.getFrom()); // ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋‘ ํ•„๋“œ ๋ชจ๋‘ ์„ค์ •
206+
wsMessage.put("message", message);
207+
wsMessage.put("sendAt", response.getSendAt().toString());
208+
209+
// ๋ฉ”์‹œ์ง€ JSON ๋ณ€ํ™˜
210+
String messageJson = objectMapper.writeValueAsString(wsMessage);
211+
log.info("Broadcasting message: {}", messageJson);
199212

200213
// ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ์˜ ๋ชจ๋“  ์„ธ์…˜์— ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
201214
broadcastMessageToRoom(roomId, messageJson);
@@ -223,9 +236,11 @@ private void broadcastMessageToRoom(Long roomId, String message) {
223236
for (WebSocketSession session : roomSessions) {
224237
try {
225238
if (session.isOpen()) {
239+
log.debug("Broadcasting to session {}", session.getId());
226240
session.sendMessage(new TextMessage(message));
227241
} else {
228242
failedSessions.add(session);
243+
log.debug("Session closed, adding to failed sessions: {}", session.getId());
229244
}
230245
} catch (IOException e) {
231246
log.error("๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage());

0 commit comments

Comments
ย (0)