웹소켓과 STOMP를 사용하여 채팅 기능 구현하기를 목표로 하고 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.webjars.bower:jquery:3.3.1'
implementation 'org.webjars:sockjs-client:1.1.2'
implementation 'org.webjars:stomp-websocket:2.3.3-1'
implementation 'org.webjars:webjars-locator:0.30'
}
@RequiredArgsConstructor
@EnableWebSocketMessageBroker
@Configuration
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/publish");
registry.enableSimpleBroker("/subscribe");
}
}
@RestController
public class ChatMessageController {
private final SimpMessagingTemplate template;
@Autowired
public ChatMessageController(SimpMessagingTemplate template) {
this.template = template;
}
@MessageMapping("/chat/enter")
public void enter(ChatMessageDto message){
message.setMessage(message.getSenderId() + "님이 입장하셨습니다.");
template.convertAndSend("/subscribe/chat/room/inout/" + message.getChatroomId(), message);
}
@MessageMapping("/chat/talk")
public void talk(ChatMessageDto message) {
template.convertAndSend("/subscribe/chat/room/" + message.getChatroomId(), message);
}
@MessageMapping("/chat/exit")
public void exit(ChatMessageDto message) {
message.setMessage(message.getSenderId() + "님이 퇴장하셨습니다.");
template.convertAndSend("/subscribe/chat/room/inout/" + message.getChatroomId(), message);
}
}
$(document).ready(function () {
const auth = Cookies.get('Authorization');
if(auth === undefined) {
return '';
}
if (auth !== undefined && auth !== '') {
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
jqXHR.setRequestHeader('Authorization', auth);
});
}
}