Skip to content

Commit e0c67b4

Browse files
committed
feat : 입장, 퇴장시 공지 메세지 반환
1 parent 941c29e commit e0c67b4

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.mbtips.common.enums;
22

33
public enum WebSocketMessageType {
4-
SUCCESS,
5-
DUPLICATE_NICKNAME
6-
4+
NOTICE,
5+
MESSAGE,
6+
ERROR
7+
;
78
}

api/src/main/java/com/mbtips/common/handler/WebSocketChatHandler.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package com.mbtips.common.handler;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
34
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import com.mbtips.common.constant.Constant;
55
import com.mbtips.common.enums.WebSocketMessageType;
66
import com.mbtips.common.exception.CustomException;
77
import com.mbtips.domain.openChat.exception.OpenChatException;
8-
import com.mbtips.openChat.application.dto.OpenChatDto;
98
import com.mbtips.openChat.application.dto.OpenChatMessageDto;
109
import com.mbtips.openChat.application.service.OpenChatMessageService;
1110
import lombok.RequiredArgsConstructor;
@@ -55,11 +54,11 @@ public void afterConnectionEstablished(WebSocketSession session) throws IOExcept
5554
long openChatId = Long.parseLong(queryParamMap.get(OPEN_CHAT_ID));
5655
if (this.checkNickname(openChatId, queryParamMap.get(NICKNAME))) {
5756
OpenChatMessageDto openChatMessageDto = OpenChatMessageDto.builder()
58-
.type(WebSocketMessageType.DUPLICATE_NICKNAME)
57+
.type(WebSocketMessageType.ERROR)
5958
.message(OpenChatException.DUPLICATED_NICKNAME.getMessage())
6059
.openChatId(openChatId)
6160
.build();
62-
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(openChatMessageDto)));
61+
broadcast(Set.of(session), openChatMessageDto);
6362
throw new CustomException(OpenChatException.DUPLICATED_NICKNAME);
6463
}
6564

@@ -70,6 +69,12 @@ public void afterConnectionEstablished(WebSocketSession session) throws IOExcept
7069
session.getAttributes().put(entry.getKey(), entry.getValue());
7170
}
7271
webSocketSessionMap.computeIfAbsent(openChatId, k -> new HashSet<>()).add(session);
72+
OpenChatMessageDto enterNotice = OpenChatMessageDto.builder()
73+
.type(WebSocketMessageType.NOTICE)
74+
.message(session.getAttributes().get(NICKNAME) + "님이 들어왔습니다.")
75+
.openChatId(openChatId)
76+
.build();
77+
broadcast(webSocketSessionMap.get(openChatId), enterNotice);
7378
}
7479

7580
@Override
@@ -115,6 +120,12 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status)
115120
throw new CustomException(OpenChatException.NOT_FOUND_OPEN_CHAT);
116121
}
117122
webSocketSessions.removeIf(webSocketSession -> webSocketSession.getId().equals(session.getId()));
123+
OpenChatMessageDto leaveNotice = OpenChatMessageDto.builder()
124+
.type(WebSocketMessageType.NOTICE)
125+
.message(session.getAttributes().get(NICKNAME) + "님이 나가셨습니다.")
126+
.openChatId(openChatId)
127+
.build();
128+
broadcast(webSocketSessions, leaveNotice);
118129
}
119130

120131
private Map<String, String> parseQueryParam(String query) {
@@ -143,4 +154,16 @@ private boolean checkNickname(long openChatId, String nickname) {
143154
.equals(nickname)
144155
);
145156
}
157+
158+
private void broadcast(Set<WebSocketSession> sessions, OpenChatMessageDto openChatMessageDto) throws JsonProcessingException {
159+
String messagePayload = objectMapper.writeValueAsString(openChatMessageDto);
160+
sessions.forEach(session -> {
161+
try {
162+
session.sendMessage(new TextMessage(messagePayload));
163+
} catch (IOException e) {
164+
log.error("메세지 전송에 실패했습니다. {}", messagePayload);
165+
throw new RuntimeException(e);
166+
}
167+
});
168+
}
146169
}

0 commit comments

Comments
 (0)