채팅기능 구현한거 1:1로 바꿔주기
아쉬운점! 관리자가 채팅방을 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);
});