내배캠 85일차

·2023년 2월 6일
0

내일배움캠프

목록 보기
93/142
post-thumbnail

월요일

채팅기능 구현한거 1:1로 바꿔주기

admin



user


아쉬운점! 관리자가 채팅방을 input에 적는게 아니라 채팅방을 고를 수 있으면 좋았을텐데 흠,,,,,, 어쩌지,,,,

히히 성공!

// 관리자가 입장할 채팅방입력
roomInput.addEventListener('change', handleRoomSubmit);

function handleRoomSubmit(event) {
  event.preventDefault();
  let input = roomInput.value;
  //socket.send와 같은 역할
  socket.emit('enter_room', input, showRoom);
  roomName = input;
}

select는 event가 change!


클라이언트에게 메시지 송신

Method Description

io.emit 접속된 모든 클라이언트에게 메시지를 전송한다.
socket.emit 메시지를 전송한 클라이언트에게만 메시지를 전송한다.
socket.broadcast.emit 메시지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메시지를 전송한다.
io.to(id).emit 특정 클라이언트에게만 메시지를 전송한다. id는 socket 객체의 id 속성값이다.

broadcast : 보낸 사람을 제외한 나머지 유저에게 메시지 전송

/* 전송한 메시지 받기 */
  socket.on('message', function(data) {
    /* 받은 데이터에 누가 보냈는지 이름을 추가 */
    data.name = socket.name
    
    console.log(data)

    /* 보낸 사람을 제외한 나머지 유저에게 메시지 전송 */
    socket.broadcast.emit('update', data);
  })

in(roomName) : roomName이랑 동일한 소켓내의 사람에게 메시지 전송

// 관리자가 채팅방에 들어갈때
  socket.on('enter_room', function (input, done) {
    // 이전 소켓떠나기
    socket.leave(roomName);
    // 새 소켓 지정
    roomName = input;
    socket.join(roomName);
    done();
    // 소켓에 전송
    io.sockets.in(roomName).emit('update', {
      type: 'connect',
      name: 'SERVER',
      message: socket.name + `님이 ${roomName}방에 접속하였습니다.`,
    });
    // 방목록 변경
    io.sockets.emit('room_change', publicRooms());
  });

broadcast + in : 같은 소켓의 나머지 사람에게 메시지 전송

 // 전송한 메시지 받기
  socket.on('message', function (data) {
    // 누가 전송한 것인지
    data.name = socket.name;
    // 같은 소켓의 나머지 사람에게 메시지 전송
    socket.broadcast.in(roomName).emit('update', data);
  });
profile
개발자 꿈나무

0개의 댓글