zoom : socket.io - rooms, users count

This commit is contained in:
haerong22
2021-10-16 20:43:17 +09:00
parent 29e097f543
commit 4f81534b0a
3 changed files with 45 additions and 5 deletions

View File

@@ -56,12 +56,30 @@ function handleRoomSubmit(event) {
form.addEventListener("submit", handleRoomSubmit);
socket.on("welcome", (user) => {
socket.on("welcome", (user, count) => {
const h3 = room.querySelector("h3");
h3.innerText = `Room : ${roomName} (${count})`;
addMessage(`${user} joined!`);
})
socket.on("bye", (left) => {
socket.on("bye", (left, count) => {
const h3 = room.querySelector("h3");
h3.innerText = `Room : ${roomName} (${count})`;
addMessage(`${left} left...`);
})
socket.on("message", addMessage);
socket.on("message", addMessage);
socket.on("room_change", (rooms) => {
const roomList = welcome.querySelector("ul");
roomList.innerHTML = "";
if (rooms.length === 0) {
return;
}
rooms.forEach(room => {
const li = document.createElement("li");
li.innerText = room;
roomList.appendChild(li);
});
});

View File

@@ -16,6 +16,22 @@ const handleListen = () => console.log(`Listening on http://localhost:3000`);
const httpServer = http.createServer(app);
const wsServer = SocketIo(httpServer);
function publicRooms() {
const {sockets: {adapter: {sids, rooms}}} = wsServer;
const publicRooms = [];
rooms.forEach((_, key) => {
if(sids.get(key) === undefined) {
publicRooms.push(key);
}
});
return publicRooms;
}
function countUsers(roomName) {
return wsServer.sockets.adapter.rooms.get(roomName)?.size;
}
wsServer.on("connection", socket => {
socket['nickname'] = "Anonymous";
socket.onAny((event) => {
@@ -24,13 +40,17 @@ wsServer.on("connection", socket => {
socket.on("enter_room", (roomName, done) => {
socket.join(roomName);
done();
socket.to(roomName).emit("welcome", socket.nickname);
socket.to(roomName).emit("welcome", socket.nickname, countUsers(roomName));
wsServer.sockets.emit("room_change", publicRooms())
});
socket.on("disconnecting", () => {
socket.rooms.forEach((room) => {
socket.to(room).emit("bye", socket.nickname);
socket.to(room).emit("bye", socket.nickname, countUsers(room) - 1);
});
})
socket.on("disconnect", () => {
wsServer.sockets.emit("room_change", publicRooms())
})
socket.on("message", (msg, room, done) => {
socket.to(room).emit("message", `${socket.nickname}: ${msg}`);
done();

View File

@@ -15,6 +15,8 @@ html(lang="en")
form
input(placeholder="room name", required, type="text")
button Enter Room
h4 Open Rooms:
ul
div#room
h3