Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public class ChatRedisPublisher {
private final String nodeId = System.getProperty("node.id",
java.lang.management.ManagementFactory.getRuntimeMXBean().getName());

public void publishToRoom(String roomId, Map<String, Object> payload) {
public void publishToRoom(UUID roomId, Map<String, Object> payload) {
try {
payload.put("_src", nodeId); // 루프 방지 태그
String json = objectMapper.writeValueAsString(payload);
stringRedisTemplate.convertAndSend(roomId, json);
stringRedisTemplate.convertAndSend(ChatChannels.roomChannel(roomId), json);
} catch (Exception ignore) {}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,22 +43,38 @@ public void send(@DestinationVariable UUID roomId,
// 또는 그냥 return; // 조용히 무시하고 싶으면
}


System.out.println("------------/chat/{roomId}/send 시작 ");

// 안전장치: 메시지의 roomId는 URL의 roomId로 강제
ChatMessage saved = chatMessageService.saveUserMessage(roomId, userId, req.getContent());
//ChatMessage saved = chatMessageService.saveUserMessage(roomId, userId, req.getContent());

// Map<String, Object> payload = Map.of(
// "id", saved.getId().toString(),
// "chatRoomId", roomId.toString(),
// "type", saved.getMessageType().name(),
// "content", saved.getContent(),
// "userId", userId != null ? userId.toString() : null,
// "createdAt", saved.getCreatedAt().toString()
// );

Map<String, Object> payload = Map.of(
"id", saved.getId().toString(),
"id", 2,
"chatRoomId", roomId.toString(),
"type", saved.getMessageType().name(),
"content", saved.getContent(),
"type", "USER",
"content", "웹소켓 테스트",
"userId", userId != null ? userId.toString() : null,
"createdAt", saved.getCreatedAt().toString()
"createdAt", "ㅇㅇㅇ"
);

//System.out.println("------------받은메세지 payload"+payload.get(0).toString());

System.out.println("------------받은메세지"+req.getContent());

// ✅ 즉시 현재 노드의 클라이언트에게 전달
// messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload);
messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload);

// ✅ 다른 노드를 위해 Redis로도 전달
chatRedisPublisher.publishToRoom("/topic/chat/" + roomId, new java.util.HashMap<>(payload));
chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public ResponseEntity<Map<String, Object>> roomAlert(
"createdAt", saved.getCreatedAt().toString()
);
messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload);
// chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload));
chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload));

return ResponseEntity.ok(Map.of("ok", true, "id", saved.getId().toString()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ protected void doDispatch(UUID playerId,
"createdAt", saved.getCreatedAt().toString()
);
messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload);
// chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload));
chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload));
}
}

Expand Down