|
@@ -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))
|
|
|
+}
|
|
|
+
|