Prechádzať zdrojové kódy

修改支持无缝刷

xzh 4 rokov pred
rodič
commit
8709e08baf
1 zmenil súbory, kde vykonal 25 pridanie a 11 odobranie
  1. 25 11
      server/socketv2.js

+ 25 - 11
server/socketv2.js

@@ -36,8 +36,8 @@ module.exports = class WebSocketServer {
     this.io.on("connection", (socket) => {
       let user = socket.handshake.query
       const { roomId, userId, sceneNum, isClient, role, userLimitNum } = user
-      const webRoomId = `${roomId}${sceneNum}`
-      const clientRoom = userId ? `${userId}` : `${sceneNum}${roomId}`
+      const webRoomId = `${roomId}_web`
+      const clientRoom = userId ? `${userId}` : `${userId}${roomId}`
       // 加入客户端与H5单独的通讯房间 
       socket.join(clientRoom, () => {
         console.log('join success', clientRoom, user)
@@ -50,9 +50,9 @@ module.exports = class WebSocketServer {
       }
 
       // 若已结束、房间已关闭
-      if ( this._roomPerson.get(roomId) && !this._roomPerson.get(roomId).find(item => item.role === 'leader')) {
-        socket.broadcast.to(roomId).emit(EVENT.roomClose)
-        return
+      if ( user.role !== 'leader'&& this._roomPerson.get(roomId) && !this._roomPerson.get(roomId).find(item => item.role === 'leader')) {
+        socket.emit(EVENT.roomClose)
+        return this
       }
 
       // 加入所有连接数的通讯房间
@@ -85,9 +85,8 @@ module.exports = class WebSocketServer {
             console.log('join webRoom', user)
             let roomsPerson = this._roomPerson.get(roomId) || []
             socket.emit(EVENT.roomIn, { roomsPerson })
-            socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson })
+            socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson: sortRoomUser(roomsPerson) })
           })
-          
         }
       })
 
@@ -100,9 +99,9 @@ module.exports = class WebSocketServer {
         if (!isClient) {
           socket.leave(webRoomId)
           let roomsPerson = this._roomPerson.get(roomId) || []
-          roomsPerson = roomsPerson.filter(item => item.userId !== user.userId)
+          roomsPerson = removeRoomUser(roomsPerson, user)
           this._roomPerson.set(roomId, roomsPerson)
-          socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
+          socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson: sortRoomUser(roomsPerson) })
         }
       })
 
@@ -130,7 +129,7 @@ module.exports = class WebSocketServer {
         })
         this._roomPerson.set(roomId, _roomPerson)
         console.log(_roomPerson, data, user)
-        socket.broadcast.to(roomId).emit(EVENT.changeVoiceStatus, {roomsPerson: _roomPerson})
+        socket.broadcast.to(roomId).emit(EVENT.changeVoiceStatus, {roomsPerson: sortRoomUser(_roomPerson)})
       })
 
       socket.on("disconnect", (reason) => {
@@ -141,7 +140,7 @@ module.exports = class WebSocketServer {
           //   socket.broadcast.to(roomId).emit(EVENT.roomClose)
           // }
           let roomsPerson = this._roomPerson.get(roomId) || []
-          roomsPerson = roomsPerson.filter(item => item.userId !== user.userId)
+          roomsPerson = removeRoomUser(roomsPerson, user)
           this._roomPerson.set(roomId, roomsPerson)
           // socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
           socket.leave(webRoomId)
@@ -175,3 +174,18 @@ module.exports = class WebSocketServer {
   }
 
 };
+
+function removeRoomUser (roomsPerson, user) {
+  for (let i = 0; i < roomsPerson.length; i++) {
+    if (roomsPerson[i].userId === user.userId) {
+      roomsPerson.splice(i, 1)
+    }
+  }
+  return roomsPerson
+}
+
+function sortRoomUser (roomsPerson) {
+  const res = new Map()
+  return roomsPerson.filter((a) => !res.has(a.userId) && res.set(a.userId, 1))
+}
+