Skip to content

Commit 28a856b

Browse files
authored
Merge pull request #103 from CommitField/fix-websocket
Fix: WebSocket ๊ด€๋ จ ์ˆ˜์ •
2 parents a54bdbc + 265a755 commit 28a856b

File tree

3 files changed

+241
-60
lines changed

3 files changed

+241
-60
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class ChatMessageServiceImpl implements ChatMessageService {
3434
private final UserChatRoomRepository userChatRoomRepository;
3535

3636
@Override
37-
@Transactional
37+
// @Transactional
3838
public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roomId) {
3939
User findUser = userRepository.findById(userId)
4040
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
Lines changed: 231 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,287 @@
11
package cmf.commitField.global.websocket;
22

3+
import cmf.commitField.domain.chat.chatMessage.controller.request.ChatMsgRequest;
4+
import cmf.commitField.domain.chat.chatMessage.controller.response.ChatMsgResponse;
5+
import cmf.commitField.domain.chat.chatMessage.service.ChatMessageService;
6+
import cmf.commitField.domain.user.entity.User;
7+
import cmf.commitField.domain.user.repository.UserRepository;
38
import cmf.commitField.global.error.ErrorCode;
49
import cmf.commitField.global.exception.CustomException;
10+
import com.fasterxml.jackson.databind.JsonNode;
11+
import com.fasterxml.jackson.databind.ObjectMapper;
12+
import lombok.RequiredArgsConstructor;
513
import lombok.extern.slf4j.Slf4j;
614
import org.springframework.stereotype.Component;
715
import org.springframework.web.socket.*;
816

917
import java.io.IOException;
18+
import java.time.LocalDateTime;
1019
import java.util.*;
1120

1221
@Component
1322
@Slf4j
23+
@RequiredArgsConstructor
1424
public class ChatWebSocketHandler implements WebSocketHandler {
1525

1626
private final Map<Long, List<WebSocketSession>> chatRooms = new HashMap<>();
17-
// ๋ฐฉ์˜ ํ‚ค๊ฐ’
18-
27+
private final ObjectMapper objectMapper = new ObjectMapper();
28+
private final ChatMessageService chatMessageService;
29+
private final UserRepository userRepository;
1930

2031
// ์—ฐ๊ฒฐ์ด ๋˜์—ˆ์„ ๋•Œ
2132
@Override
2233
public void afterConnectionEstablished(WebSocketSession session)
2334
throws Exception {
24-
// list.add(session);
25-
Long roomId = extractRoomId(session);
26-
// roomId ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, session list (new ArrayList)
27-
List<WebSocketSession> roomSessions = chatRooms.getOrDefault(roomId, new ArrayList<>());
28-
// ์„ธ์…˜ ์ถ”๊ฐ€
29-
roomSessions.add(session);
30-
// ํ•ด๋‹น ๋ฐฉ์˜ ํ‚ค๊ฐ’์— session list ์ถ”๊ฐ€
31-
chatRooms.put(roomId, roomSessions);
32-
log.info(session + "์˜ ํด๋ผ์ด์–ธํŠธ ์ ‘์†");
35+
log.info("ํด๋ผ์ด์–ธํŠธ ์ ‘์†: {}", session.getId());
36+
37+
// ์—ฐ๊ฒฐ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ์ „์†ก
38+
Map<String, Object> connectMessage = new HashMap<>();
39+
connectMessage.put("type", "SYSTEM");
40+
connectMessage.put("message", "์ฑ„ํŒ… ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
41+
connectMessage.put("timestamp", LocalDateTime.now().toString());
42+
43+
try {
44+
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(connectMessage)));
45+
} catch (Exception e) {
46+
log.error("์—ฐ๊ฒฐ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹คํŒจ: {}", e.getMessage());
47+
}
3348
}
3449

3550
// ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง
3651
@Override
3752
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message)
3853
throws Exception {
39-
// ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง
40-
Long roomId = extractRoomId(session);
54+
String payload = message.getPayload().toString();
55+
log.info("๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : {}", payload);
56+
57+
try {
58+
JsonNode jsonNode = objectMapper.readTree(payload);
59+
String messageType = jsonNode.has("type") ? jsonNode.get("type").asText() : "UNKNOWN";
60+
61+
switch (messageType) {
62+
case "SUBSCRIBE":
63+
handleSubscribe(session, jsonNode);
64+
break;
65+
case "UNSUBSCRIBE":
66+
handleUnsubscribe(session, jsonNode);
67+
break;
68+
case "CHAT":
69+
handleChatMessage(session, jsonNode);
70+
break;
71+
default:
72+
log.warn("์•Œ ์ˆ˜ ์—†๋Š” ๋ฉ”์‹œ์ง€ ํƒ€์ž…: {}", messageType);
73+
sendErrorMessage(session, "์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์‹œ์ง€ ํƒ€์ž…์ž…๋‹ˆ๋‹ค: " + messageType);
74+
}
75+
} catch (Exception e) {
76+
log.error("๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {}", e.getMessage(), e);
77+
// ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก
78+
sendErrorMessage(session, "๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " + e.getMessage());
79+
}
80+
}
81+
82+
// ๊ตฌ๋… ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ
83+
private void handleSubscribe(WebSocketSession session, JsonNode jsonNode) {
84+
try {
85+
if (!jsonNode.has("roomId")) {
86+
sendErrorMessage(session, "roomId ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
87+
return;
88+
}
89+
90+
Long roomId = jsonNode.get("roomId").asLong();
91+
log.info("์ฑ„ํŒ…๋ฐฉ ๊ตฌ๋… ์š”์ฒญ: roomId={}, sessionId={}", roomId, session.getId());
92+
93+
// ํ•ด๋‹น ๋ฃธ์˜ ์„ธ์…˜ ๋ชฉ๋ก์— ์ถ”๊ฐ€
94+
List<WebSocketSession> roomSessions = chatRooms.getOrDefault(roomId, new ArrayList<>());
95+
96+
// ์ด๋ฏธ ๋“ฑ๋ก๋œ ์„ธ์…˜์ธ์ง€ ํ™•์ธํ•˜์—ฌ ์ค‘๋ณต ๋“ฑ๋ก ๋ฐฉ์ง€
97+
boolean alreadyRegistered = roomSessions.stream()
98+
.anyMatch(existingSession -> existingSession.getId().equals(session.getId()));
99+
100+
if (!alreadyRegistered) {
101+
roomSessions.add(session);
102+
chatRooms.put(roomId, roomSessions);
103+
log.info("ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ {}๊ฐ€ ๋ฃธ {}์— ๊ตฌ๋…๋จ", session.getId(), roomId);
104+
105+
// ๊ตฌ๋… ํ™•์ธ ๋ฉ”์‹œ์ง€ ์ „์†ก
106+
Map<String, Object> subscribeResponse = new HashMap<>();
107+
subscribeResponse.put("type", "SUBSCRIBE_ACK");
108+
subscribeResponse.put("roomId", roomId);
109+
subscribeResponse.put("timestamp", LocalDateTime.now().toString());
110+
subscribeResponse.put("message", "์ฑ„ํŒ…๋ฐฉ์— ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
111+
112+
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(subscribeResponse)));
113+
} else {
114+
log.info("์ด๋ฏธ ๊ตฌ๋… ์ค‘์ธ ์„ธ์…˜: sessionId={}, roomId={}", session.getId(), roomId);
115+
}
116+
} catch (Exception e) {
117+
log.error("๊ตฌ๋… ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage(), e);
118+
try {
119+
sendErrorMessage(session, "๊ตฌ๋… ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: " + e.getMessage());
120+
} catch (IOException ex) {
121+
log.error("์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹คํŒจ: {}", ex.getMessage());
122+
}
123+
}
124+
}
125+
126+
// ๊ตฌ๋… ํ•ด์ œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ
127+
private void handleUnsubscribe(WebSocketSession session, JsonNode jsonNode) {
128+
try {
129+
if (!jsonNode.has("roomId")) {
130+
sendErrorMessage(session, "roomId ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
131+
return;
132+
}
133+
134+
Long roomId = jsonNode.get("roomId").asLong();
135+
136+
List<WebSocketSession> roomSessions = chatRooms.get(roomId);
137+
if (roomSessions != null) {
138+
roomSessions.removeIf(existingSession -> existingSession.getId().equals(session.getId()));
139+
log.info("ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ {}๊ฐ€ ๋ฃธ {}์—์„œ ๊ตฌ๋… ํ•ด์ œ๋จ", session.getId(), roomId);
140+
141+
// ๊ตฌ๋… ํ•ด์ œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€ ์ „์†ก
142+
Map<String, Object> unsubscribeResponse = new HashMap<>();
143+
unsubscribeResponse.put("type", "UNSUBSCRIBE_ACK");
144+
unsubscribeResponse.put("roomId", roomId);
145+
unsubscribeResponse.put("timestamp", LocalDateTime.now().toString());
146+
unsubscribeResponse.put("message", "์ฑ„ํŒ…๋ฐฉ์—์„œ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
147+
148+
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(unsubscribeResponse)));
149+
} else {
150+
log.warn("์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฑ„ํŒ…๋ฐฉ ๊ตฌ๋… ํ•ด์ œ ์‹œ๋„: roomId={}", roomId);
151+
sendErrorMessage(session, "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฑ„ํŒ…๋ฐฉ์ž…๋‹ˆ๋‹ค: " + roomId);
152+
}
153+
} catch (Exception e) {
154+
log.error("๊ตฌ๋… ํ•ด์ œ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage(), e);
155+
try {
156+
sendErrorMessage(session, "๊ตฌ๋… ํ•ด์ œ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: " + e.getMessage());
157+
} catch (IOException ex) {
158+
log.error("์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹คํŒจ: {}", ex.getMessage());
159+
}
160+
}
161+
}
162+
163+
// ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ
164+
private void handleChatMessage(WebSocketSession session, JsonNode jsonNode) {
165+
try {
166+
// ํ•„์ˆ˜ ํ•„๋“œ ๊ฒ€์ฆ
167+
if (!jsonNode.has("roomId") || !jsonNode.has("message") || !jsonNode.has("userId")) {
168+
sendErrorMessage(session, "ํ•„์ˆ˜ ํ•„๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (roomId, message, userId ํ•„์š”)");
169+
return;
170+
}
171+
172+
Long roomId = jsonNode.get("roomId").asLong();
173+
Long userId = jsonNode.get("userId").asLong();
174+
String message = jsonNode.get("message").asText();
175+
176+
if (message == null || message.trim().isEmpty()) {
177+
sendErrorMessage(session, "๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค.");
178+
return;
179+
}
180+
181+
log.info("์ฑ„ํŒ… ๋ฉ”์‹œ์ง€: roomId={}, userId={}, message={}", roomId, userId, message);
182+
183+
// ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฒ€์ฆ
184+
User user = userRepository.findById(userId).orElse(null);
185+
if (user == null) {
186+
log.warn("์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž: userId={}", userId);
187+
sendErrorMessage(session, "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.");
188+
return;
189+
}
190+
191+
// ๋ฉ”์‹œ์ง€ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ
192+
try {
193+
ChatMsgRequest chatMsgRequest = new ChatMsgRequest(message);
194+
ChatMsgResponse response = chatMessageService.sendMessage(chatMsgRequest, userId, roomId);
195+
196+
// ๋ฉ”์‹œ์ง€ ํฌ๋งท ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†ก
197+
String messageJson = objectMapper.writeValueAsString(response);
198+
199+
// ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ์˜ ๋ชจ๋“  ์„ธ์…˜์— ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
200+
broadcastMessageToRoom(roomId, messageJson);
201+
} catch (Exception e) {
202+
log.error("๋ฉ”์‹œ์ง€ ์ €์žฅ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage(), e);
203+
sendErrorMessage(session, "๋ฉ”์‹œ์ง€ ์ „์†ก ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " + e.getMessage());
204+
}
205+
206+
} catch (Exception e) {
207+
log.error("์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage(), e);
208+
try {
209+
sendErrorMessage(session, "๋ฉ”์‹œ์ง€ ์ „์†ก ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " + e.getMessage());
210+
} catch (IOException ex) {
211+
log.error("์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹คํŒจ: {}", ex.getMessage());
212+
}
213+
}
214+
}
215+
216+
// ํŠน์ • ์ฑ„ํŒ…๋ฐฉ์— ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
217+
private void broadcastMessageToRoom(Long roomId, String message) {
41218
List<WebSocketSession> roomSessions = chatRooms.get(roomId);
42219
if (roomSessions != null) {
43-
String payload = message.getPayload().toString();
44-
log.info("์ „์†ก ๋ฉ”์‹œ์ง€: " + payload);
220+
List<WebSocketSession> failedSessions = new ArrayList<>();
45221

46-
for (WebSocketSession msg : roomSessions) {
222+
for (WebSocketSession session : roomSessions) {
47223
try {
48-
msg.sendMessage(message);
224+
if (session.isOpen()) {
225+
session.sendMessage(new TextMessage(message));
226+
} else {
227+
failedSessions.add(session);
228+
}
49229
} catch (IOException e) {
50-
throw new CustomException(ErrorCode.CHAT_ERROR);
230+
log.error("๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ค‘ ์˜ค๋ฅ˜: {}", e.getMessage());
231+
failedSessions.add(session);
51232
}
52233
}
234+
235+
// ์‹คํŒจํ•œ ์„ธ์…˜ ์ •๋ฆฌ
236+
if (!failedSessions.isEmpty()) {
237+
log.info("๋‹ซํžŒ ์„ธ์…˜ ์ •๋ฆฌ: {} ๊ฐœ์˜ ์„ธ์…˜ ์ œ๊ฑฐ", failedSessions.size());
238+
roomSessions.removeAll(failedSessions);
239+
}
53240
} else {
54-
log.info("ํ•ด๋‹น ์ฑ„ํŒ…๋ฐฉ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.");
55-
throw new CustomException(ErrorCode.NOT_EXIST_CLIENT);
241+
log.warn("์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฑ„ํŒ…๋ฐฉ์— ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ๋„: roomId={}", roomId);
56242
}
57243
}
58244

59-
//์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„ (๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜, ํ”„๋กœํ† ์ฝœ ์˜ค๋ฅ˜, ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜... ์ƒ๊ฐ ์ค‘)
245+
// ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ „์†ก
246+
private void sendErrorMessage(WebSocketSession session, String errorMessage) throws IOException {
247+
Map<String, Object> errorResponse = new HashMap<>();
248+
errorResponse.put("type", "ERROR");
249+
errorResponse.put("message", errorMessage);
250+
errorResponse.put("timestamp", LocalDateTime.now().toString());
251+
252+
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(errorResponse)));
253+
}
254+
255+
// ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง
60256
@Override
61257
public void handleTransportError(WebSocketSession session, Throwable exception)
62258
throws Exception {
63-
log.error(exception.getMessage());
259+
log.error("WebSocket ํ†ต์‹  ์˜ค๋ฅ˜: {}", exception.getMessage(), exception);
64260
}
65261

66262
// ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ
67263
@Override
68264
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus)
69265
throws Exception {
70-
Long roomId = extractRoomId(session); // ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์†ํ•œ ์ฑ„ํŒ…๋ฐฉ ID๋ฅผ ์ถ”์ถœ
266+
log.info("ํด๋ผ์ด์–ธํŠธ ์ ‘์† ํ•ด์ œ: {}, ์ƒํƒœ์ฝ”๋“œ: {}", session.getId(), closeStatus);
71267

72-
List<WebSocketSession> roomSessions = chatRooms.get(roomId);
73-
if (roomSessions != null) {
74-
roomSessions.remove(session);
268+
// ๋ชจ๋“  ์ฑ„ํŒ…๋ฐฉ์—์„œ ์„ธ์…˜ ์ œ๊ฑฐ
269+
for (Map.Entry<Long, List<WebSocketSession>> entry : chatRooms.entrySet()) {
270+
Long roomId = entry.getKey();
271+
List<WebSocketSession> roomSessions = entry.getValue();
272+
273+
boolean removed = roomSessions.removeIf(existingSession ->
274+
existingSession.getId().equals(session.getId()));
275+
276+
if (removed) {
277+
log.info("์„ธ์…˜์ด ์ฑ„ํŒ…๋ฐฉ {}์—์„œ ์ œ๊ฑฐ๋จ: {}", roomId, session.getId());
278+
}
75279
}
76-
log.info(session + "์˜ ํด๋ผ์ด์–ธํŠธ ์ ‘์† ํ•ด์ œ");
77280
}
78281

79-
//๋ถ€๋ถ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ (์•„์ง๊นŒ์ง€๋Š” ํ•„์š” ์—†์œผ๋‹ˆ false)
80-
//๋Œ€์šฉ๋Ÿ‰(์‚ฌ์ง„์ด๋‚˜ ๋™์˜์ƒ ๋“ฑ)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ.
282+
// ๋ถ€๋ถ„ ๋ฉ”์‹œ์ง€ ์ง€์› ์—ฌ๋ถ€
81283
@Override
82284
public boolean supportsPartialMessages() {
83285
return false;
84286
}
85-
86-
private Long extractRoomId(WebSocketSession session) {
87-
Long roomId = null;
88-
String uri = Objects.requireNonNull(session.getUri()).toString();
89-
String[] uriParts = uri.split("/");
90-
// EX_URL) /chat/room/{roomId} ์ผ ๋•Œ roomId ์ถ”์ถœ
91-
// ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ์ˆ˜ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด.. (์ผ๋‹จ ์ž„์‹œ๋กœ ์„ค์ •)
92-
// if (uriParts.length >= 3 && uriParts[2].equals("room")) {
93-
// roomId = Long.valueOf(uriParts[3]);
94-
if (uriParts.length >= 4 && uriParts[2].equals("msg")) {
95-
return Long.valueOf(uriParts[3]);
96-
}
97-
// /chat/room/join/{roomId}, /chat/room/out/{roomId}, /chat/room/delete/{roomId} ์ผ ๋•Œ roomId ์ถ”์ถœ
98-
if (uriParts.length >= 5 && uriParts[2].equals("room") &&
99-
(uriParts[3].equals("join") || uriParts[3].equals("out") || uriParts[3].equals("delete"))) {
100-
roomId = Long.valueOf(uriParts[4]);
101-
}
102-
return roomId;
103-
}
104-
//๋ฉ”์„ธ์ง€ ์ „์†ก
105-
public void sendMessage(String payload) throws Exception {
106-
for (List<WebSocketSession> sessions : chatRooms.values()) {
107-
for (WebSocketSession session : sessions) {
108-
TextMessage msg = new TextMessage(payload);
109-
session.sendMessage(msg);
110-
}
111-
}
112-
}
113287
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,16 @@
1212
public class WebSocketConfig implements WebSocketConfigurer {
1313

1414
private final ChatWebSocketHandler chatWebSocketHandler;
15+
private final NotiWebSocketHandler notiWebSocketHandler;
1516

1617
@Override
1718
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
18-
registry.addHandler(chatWebSocketHandler, "/chat").setAllowedOrigins("*");
19+
// ์ฑ„ํŒ… ์›น์†Œ์ผ“ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
20+
registry.addHandler(chatWebSocketHandler, "/chat-rooms")
21+
.setAllowedOrigins("*"); // CORS ์„ค์ •, ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ์ œํ•œ์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•จ
22+
23+
// ์•Œ๋ฆผ ์›น์†Œ์ผ“ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
24+
registry.addHandler(notiWebSocketHandler, "/notifications")
25+
.setAllowedOrigins("*");
1926
}
20-
}
27+
}

0 commit comments

Comments
ย (0)