현재 상황에서 방을 만들 수 있는 기능이 없다. 그렇기 때문에 해당 창을 켜 놓은 상태라면 무조건적으로 접속해 있는 상황이 된다.
하지만, 접속한 사용자에게만 전달하는 기능의 뼈대를 구현해놓고자 한다.
const users = {};
io.on('connection', (socket) => {
console.log(socket.id + "is connected.");
users[socket.id] = socket;
socket.on('chat message', (message) => {
for (const user in users) {
io.to(user).emit('chat message', message);
}
});
socket.on('disconnect', () => {
console.log(socket.id + 'is disconnected.');
delete users[socket.id];
});
});
우선, users라는 Object를 하나 생성해서 해당 Object에 socket.id
값을 사용자를 식별하는 key로 두고, value로는 socket 객체 그 자체를 넘겨준다.
이후, chat messsage
이벤트가 발생했을 때, 해당 users에 등록되어 있는 사용자에게만 chat message
를 브로드캐스트한다.
이때, 해당 사용자가 접속 중인지는 value에 저장된 socket 객체의 connected
프로퍼티로 확인할 수 있지만 여기서는 그런 검사를 하지 않아도 된다.
그 이유는 disconnect
이벤트가 발생하면 해당 user 데이터를 삭제하기 때문이다. 물론 이후에는 여러 기능이 들어오면서 달라질 수 있는 부분이지만 현재로서는 이 정도면 충분하다고 생각된다.
혼자 접속해 있는 상황에서도 자신이 보낸 메시지가 화면에 출력된다.
두 명이 서로 메시지를 보낸 내용도 화면에 잘 기록된다.