TIL 97일차

Moon-Tree·2023년 5월 17일
0

◆ 메세지 알림 시도 전

<메세지 알림>

  1. db 기준 방에 참가한 인원 : 8명 / 사이트에 참여하지 않은 인원 : 2명(신경쓰지 않는다.)
  2. 대기실에는 있으나 채팅방에 접속 하지 않은 참가 인원(dm에 접속되어 있는 사람들 : 6명) : 2명 -> DmRoomVO(-1(대기실)) Set에 존재
  3. (웹소켓 채널)채팅방에 참가하고있는 인원 (채팅 하고 있는 사람들 : 4명) -> DmRoomVO(roomNo)의 Set에 존재
  4. DB에서 전체 인원 반환(List)
  5. 4명한테 메세지를 보낸다면, 메세지를 받지 않은 4명이 남아있다.
  6. 메세지를 받지 않은 4명은 대기실에서 찾아야된다. -> 2명은 대기실에서 탐색이 된다.
  7. -> 대기실에 존재하는 2명한테 채팅방 목록을 갱신할 데이터를 보내줘야 된다. (새 메시지가 왔다, 몇 개 왔다.)
    • 몇 개 왔다. = 메세지들의 시간 - 그 사람이 마지막으로 접속한 시간 > 0 => 개수
    • 개수 > 0 새로운 메세지가 있다.

  • 시간 갱신
    메세지 왔을때, 새로운 사람 들어왔을때, 나갔을때

  • 읽지 않은 메세지 수 구하기 (MapOf(), SetOf())
    //const newRoomInfo = {type:설정한 상수,rooNo:41, count:2}
    //this.dmRoomList.MapOf() roomNo가 41인걸 찾아서 index 반환
    //this.dmRoomList.count = newRoomInfo.count
    count(sum 메세지들의 시간>참가자가 방에 접속한 마지막 시간 +1) as unread_Count
  • 읽지 않은 메세지 수를 아래 memberInfoDto(객체)로 만들면 채팅방 이름에 숫자와 시간이 실시간으로 변경된다.

  • 마지막 메세지 실시간 갱신
  • 신규 채팅방 갱신
  1. 대기실에 없으면 생략
  2. 대기실에 있다.
MemberInfoDto memberInfoDto = ~repo.selectOne();
String newRoom = mapper.writeValueAsString(memberInfoDto);
TextMessage newRoomJson = new TextMessage(newRoom);

객체 broadCast(newRoomJson)
profile
Backend Developer

0개의 댓글