|
@@ -20,6 +20,11 @@ const EVENT = {
|
|
|
changeVoiceStatus: 'changeVoiceStatus'
|
|
|
}
|
|
|
|
|
|
+const CODEMAP = {
|
|
|
+ 3001: '房间已被解散',
|
|
|
+ 3002: '房主主动解散'
|
|
|
+}
|
|
|
+
|
|
|
module.exports = class WebSocketServer {
|
|
|
constructor() {
|
|
|
this._pageMap = new Map();
|
|
@@ -43,12 +48,10 @@ 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}_web`
|
|
|
+ const webRoomId = `${roomId}_${sceneNum}_web`
|
|
|
const clientRoom = userId ? `${userId}` : `${userId}${roomId}`
|
|
|
// 加入客户端与H5单独的通讯房间
|
|
|
- console.log(user, '新连接')
|
|
|
socket.join(clientRoom, () => {
|
|
|
- console.log('join success', clientRoom, user)
|
|
|
})
|
|
|
|
|
|
socket.on(EVENT.clientSyncAction, (data) => {
|
|
@@ -69,8 +72,8 @@ module.exports = class WebSocketServer {
|
|
|
|
|
|
// 若有房间人数限制
|
|
|
if (userLimitNum && this._roomPerson.get(roomId) && sortRoomUser(this._roomPerson.get(roomId)).length >= userLimitNum) {
|
|
|
- console.log(this._roomPerson.get(roomId), 'full')
|
|
|
- console.log(this._roomPerson.get(roomId).length, userLimitNum, 'full')
|
|
|
+ // console.log(this._roomPerson.get(roomId), 'full')
|
|
|
+ // console.log(this._roomPerson.get(roomId).length, userLimitNum, 'full')
|
|
|
setTimeout(() => {
|
|
|
socket.emit('roomInFail', { type: 'full', msg: '房间人数已满' })
|
|
|
}, 1000)
|
|
@@ -83,7 +86,7 @@ module.exports = class WebSocketServer {
|
|
|
if ( user.role !== 'leader'&& ((this._roomPerson.get(roomId) && !this._roomPerson.get(roomId).find(item => item.role === 'leader')) || (!this._roomPerson.get(roomId)))) {
|
|
|
console.log('roomClose')
|
|
|
setTimeout(() => {
|
|
|
- socket.emit(EVENT.roomClose)
|
|
|
+ socket.emit(EVENT.roomClose, { code: 3001, msg: CODEMAP[3001]})
|
|
|
}, 1000)
|
|
|
return this
|
|
|
}
|
|
@@ -96,6 +99,13 @@ module.exports = class WebSocketServer {
|
|
|
if (userId) {
|
|
|
user.sig = getSig(userId)
|
|
|
}
|
|
|
+ let clientPerson = this._roomPerson.get(clientRoom) || []
|
|
|
+ clientPerson.forEach(item => {
|
|
|
+ if (item.userId === user.userId && item.avatar) {
|
|
|
+ user.avatar = item.avatar
|
|
|
+ user.voiceStatus = item.voiceStatus
|
|
|
+ }
|
|
|
+ })
|
|
|
roomsPerson.push(user)
|
|
|
this._roomPerson.set(roomId, roomsPerson)
|
|
|
}
|
|
@@ -104,34 +114,32 @@ module.exports = class WebSocketServer {
|
|
|
if (isClient) {
|
|
|
clientPerson.push(user)
|
|
|
this._roomPerson.set(clientRoom, clientPerson)
|
|
|
- } else {
|
|
|
- clientPerson.forEach(item => {
|
|
|
- if (item.userId === user.userId) {
|
|
|
- user.avatar = item.avatar
|
|
|
- user.voiceStatus = item.voiceStatus
|
|
|
- }
|
|
|
- })
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ if (!isClient) {
|
|
|
+ socket.join(webRoomId, () => {
|
|
|
+ // let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
+ // socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson: sortRoomUser(roomsPerson) })
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
socket.on(EVENT.startCall, () => {
|
|
|
if (!isClient) {
|
|
|
- socket.join(webRoomId, () => {
|
|
|
- console.log('join webRoom', user)
|
|
|
- let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
- socket.emit(EVENT.roomIn, { roomsPerson: sortRoomUser(roomsPerson) })
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson: sortRoomUser(roomsPerson) })
|
|
|
- })
|
|
|
+ let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
+ console.log('startCall', sortRoomUser(roomsPerson) )
|
|
|
+ socket.emit(EVENT.roomIn, { roomsPerson: sortRoomUser(roomsPerson) })
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson: sortRoomUser(roomsPerson) })
|
|
|
}
|
|
|
})
|
|
|
|
|
|
socket.on(EVENT.stopCall, () => {
|
|
|
socket.leave(roomId)
|
|
|
if (role === 'leader') {
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.roomClose)
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomClose, { code: 3002, msg: CODEMAP[3002]})
|
|
|
}
|
|
|
if (!isClient) {
|
|
|
- socket.leave(webRoomId)
|
|
|
+ console.log('stopCall', user)
|
|
|
+ // socket.leave(webRoomId)
|
|
|
let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
roomsPerson = removeRoomUser(roomsPerson, user)
|
|
|
this._roomPerson.set(roomId, roomsPerson)
|
|
@@ -201,4 +209,3 @@ function sortRoomUser (roomsPerson) {
|
|
|
const res = new Map()
|
|
|
return roomsPerson.filter((a) => !res.has(a.userId) && res.set(a.userId, 1))
|
|
|
}
|
|
|
-
|