|
@@ -4,11 +4,13 @@ const EVENT = {
|
|
|
someOneInRoom: 'someOneInRoom',
|
|
|
someOneLeaveRoom: 'someOneLeaveRoom',
|
|
|
startCall: 'startCall',
|
|
|
- putup: 'putup',
|
|
|
+ stopCall: 'stopCall',
|
|
|
webSyncAction: 'webSyncAction',
|
|
|
clientSyncAction: 'clientSyncAction',
|
|
|
action: 'action',
|
|
|
- roomClose: 'roomClose'
|
|
|
+ roomClose: 'roomClose',
|
|
|
+ roomIn: 'roomIn',
|
|
|
+ changeVoiceStatus: 'changeVoiceStatus'
|
|
|
}
|
|
|
|
|
|
module.exports = class WebSocketServer {
|
|
@@ -33,39 +35,62 @@ module.exports = class WebSocketServer {
|
|
|
|
|
|
this.io.on("connection", (socket) => {
|
|
|
let user = socket.handshake.query
|
|
|
- const { roomId, deviceId, sceneNum, isClient, useId } = user
|
|
|
+ const { roomId, userId, sceneNum, isClient, role } = user
|
|
|
const webRoomId = `${roomId}${sceneNum}`
|
|
|
-
|
|
|
+ const clientRoom = userId ? `${userId}` : `${sceneNum}${roomId}`
|
|
|
// 加入客户端与H5单独的通讯房间
|
|
|
- socket.join(deviceId)
|
|
|
+ socket.join(clientRoom, () => {
|
|
|
+ console.log('join success', clientRoom, user)
|
|
|
+ })
|
|
|
|
|
|
// 加入所有连接数的通讯房间
|
|
|
socket.join(roomId, () => {
|
|
|
// 只有h5才能加入H5端的房间
|
|
|
-
|
|
|
+ if (!isClient) {
|
|
|
+ let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
+ roomsPerson.push(user)
|
|
|
+ this._roomPerson.set(roomId, roomsPerson)
|
|
|
+ }
|
|
|
})
|
|
|
- if (!isClient) {
|
|
|
- socket.join(webRoomId, () => {
|
|
|
-
|
|
|
+ let clientPerson = this._roomPerson.get(clientRoom) || []
|
|
|
+ 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
|
|
|
+ }
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
socket.on(EVENT.startCall, () => {
|
|
|
+ console.log('startcall', user)
|
|
|
if (!isClient) {
|
|
|
- let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
- roomsPerson.push(user)
|
|
|
- this._roomPerson.set(roomId, roomsPerson)
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson })
|
|
|
+ socket.join(webRoomId, () => {
|
|
|
+ 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.on(EVENT.putup, () => {
|
|
|
+ socket.on(EVENT.stopCall, () => {
|
|
|
+ socket.leave(roomId)
|
|
|
if (!isClient) {
|
|
|
+ socket.leave(webRoomId)
|
|
|
+ if (role === 'leader') {
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomClose)
|
|
|
+ }
|
|
|
let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
- roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
|
|
|
+ roomsPerson = roomsPerson.filter(item => item.userId !== user.userId)
|
|
|
this._roomPerson.set(roomId, roomsPerson)
|
|
|
socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
|
|
|
+
|
|
|
}
|
|
|
})
|
|
|
|
|
@@ -78,18 +103,36 @@ module.exports = class WebSocketServer {
|
|
|
})
|
|
|
|
|
|
socket.on(EVENT.clientSyncAction, (data) => {
|
|
|
- socket.broadcast.to(deviceId).emit(EVENT.clientSyncAction, data)
|
|
|
+ console.log('client', clientRoom, data)
|
|
|
+ socket.broadcast.to(clientRoom).emit(EVENT.clientSyncAction, data)
|
|
|
+ })
|
|
|
+
|
|
|
+ socket.on(EVENT.changeVoiceStatus, data => {
|
|
|
+ let _roomPerson = this._roomPerson.get(roomId) || []
|
|
|
+ user.voiceStatus = data.status
|
|
|
+ console.log(_roomPerson, '_roomPerson')
|
|
|
+ _roomPerson.forEach(item => {
|
|
|
+ if (item.userId === user.userId) {
|
|
|
+ item.voiceStatus = user.voiceStatus
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this._roomPerson.set(roomId, _roomPerson)
|
|
|
+ console.log(_roomPerson, data, user)
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.changeVoiceStatus, {roomsPerson: _roomPerson})
|
|
|
})
|
|
|
|
|
|
socket.on("disconnect", (reason) => {
|
|
|
+ socket.leave(roomId)
|
|
|
if (!isClient) {
|
|
|
+ if (role === 'leader') {
|
|
|
+ socket.broadcast.to(roomId).emit(EVENT.roomClose)
|
|
|
+ }
|
|
|
let roomsPerson = this._roomPerson.get(roomId) || []
|
|
|
- roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
|
|
|
+ roomsPerson = roomsPerson.filter(item => item.userId !== user.userId)
|
|
|
this._roomPerson.set(roomId, roomsPerson)
|
|
|
socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
|
|
|
- if (user.isOwner) {
|
|
|
- socket.broadcast.to(roomId).emit(EVENT.roomClose)
|
|
|
- }
|
|
|
+ socket.leave(webRoomId)
|
|
|
+ socket.leave(roomId)
|
|
|
}
|
|
|
})
|
|
|
|