결국에는 에어비앤비 프로젝트에 넣을 기능이기 때문에 다르게 설정될 부분을 제외하고 공통으로 들어갈 부분만 기록하겠습니다.
@Component
public class SocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
//메시지 발송
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
//소켓 연결
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
//소켓 종료
}
}
HashMap<String, WebSocketSession> sessionMap = new HashMap<>();
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
//메시지 발송
String msg = message.getPayload();
for(String key : sessionMap.keySet()) {
WebSocketSession wss = sessionMap.get(key);
try {
wss.sendMessage(new TextMessage(msg));
}catch(Exception e) {
e.printStackTrace();
}
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
//소켓 연결
super.afterConnectionEstablished(session);
sessionMap.put(session.getId(), session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
//소켓 종료
sessionMap.remove(session.getId());
super.afterConnectionClosed(session, status);
}
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{
@Autowired
SocketHandler socketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(socketHandler, "/chating");
}
}
var ws;
function wsOpen(){
ws = new WebSocket("ws://" + location.host + "/chating");
wsEvt();
}
function wsEvt() {
ws.onopen = function(data){
//소켓이 열리면 초기화 세팅하기
}
ws.onmessage = function(data) {
var msg = data.data;
if(msg != null && msg.trim() != ''){
$("#chating").append("<p>" + msg + "</p>");
}
}
document.addEventListener("keypress", function(e){
if(e.keyCode == 13){ //enter press
send();
}
});
}
function chatName(){
var userName = $("#userName").val();
if(userName == null || userName.trim() == ""){
alert("사용자 이름을 입력해주세요.");
$("#userName").focus();
}else{
wsOpen();
$("#yourName").hide();
$("#yourMsg").show();
}
}
function send() {
var uN = $("#userName").val();
var msg = $("#chatting").val();
ws.send(uN+" : "+msg);
$('#chatting').val("");
}
#Reference
https://myhappyman.tistory.com/100