본문 바로가기

Project/KH.학원프로젝트

Final-[J&Y Co.] 05. 실시간 일대일채팅_WebSocket

[ 파이널프로젝트(http://iclasskh.iptime.org:9090/jy/) ]

Final-[J&Y Co.] 01.전자결재 step.1

Final-[J&Y Co.] 02.전자결재 step.2

Final-[J&Y Co.] 03.회람

Final-[J&Y Co.] 04.알림_WebSocket

Final-[J&Y Co.] 05.실시간 일대일채팅_WebSocket

 

 

5. 실시간 일대일채팅_WebSocket

  (1) 로그인한 사용자들 조회(EchoHandler에 담겨진 Session 정보값을 가져옴)

     - 로그인한 사용자들을 대상으로 채팅방 생성 가능

  (2) 사용자A가 메세지를 보냈을 때, 아직 사용자B가 채팅방에 접속하지 않았으므로 사용자B에게 알림이 전송

     -> 두 사용자가 모두 채팅방에 접속시 서로의 메세지를 전송

 

1) 채팅방에 필요한 객체

ㅡ 객체: 채팅방정보를 담는 ChatterRoom / 채팅메세지정보를 담는 ChatMessage

2) ChatterHandler.java

   a. 소켓연결시 모든 회원의 Session을 Set<WebSocketSession>에 담음

   b. 채팅방에 접속시 채팅방번호와 함께 채팅방 정보를 Map<Integer,  ChatterRoom>에 담음

    (방번호에 따른 채팅방이 존재하지 않을 경우 new ChatterRoom() 객체 생성하고 그렇지 않을 경우 기존의 객체 사용)

      + 채팅방에 접속자의 WebSocketSession 정보도 입력

   c. 채팅방에 들어갔을 때 Enter메세지 띄움

   d. ObjectMapper를 이용하여 보내온 메세지를 ChatMessage.class 형식으로 전환

   e. 메세지 전송 시, 채팅방 객체에 담긴 Session의 갯수가 1일 경우 상대방을 찾아서 메세지가 전송되었음을 알림

   f. 메세지 전송은 채팅방 번호에 따른 객체에 포함된 WebSocketSession에 모두 전송

3) 채팅방에서의 메세지 처리 : TextWebSocketHandler를 사용하므로 모든 메세지는 JSON객체를 이용하여 String형식으로 보내야함

   a. ChatterHandler 를 이용한 WebSocket열기

     ㅡ 채팅방 접속하자마자 onOpen() 함수를 이용하여 ENTER 메세지 우선 전송

     ㅡ 채팅메세지는 onSend(msg) 함수를 이용하여 객체형식으로 보냄

   b. onMessage(msg) 메세지 받기

     ㅡ msg형식 : "보낸사람,메세지"이고 메세지==0인 경우 Enter 메세지를 띄우고

                      그렇지 않을 경우 보낸사람과 받은사람의 정보를 비교하여 메세지를 띄워준다.

c. 채팅방에 메세지 띄울시 함께 보낸 시간정보 담기

d. 채팅방에서 채팅 입력방법

  1) Enter버튼     2) Send 버튼

 

# 배운점

1) 채팅방 분할하여 지정하기 위한 채팅방 객체에 대한 고민

2) 웹소켓을 이용하기 위해서 사용한 ObjectMapper 객체 사용과 JSON 객체의 사용