|
@@ -1,6 +1,18 @@
|
|
|
-const { v4: uuidv4 } = require("uuid")
|
|
|
-const server = require("http").createServer()
|
|
|
+const {
|
|
|
+ v4: uuidv4
|
|
|
+} = require("uuid")
|
|
|
+const fs = require("fs");
|
|
|
+// const server = require("http").createServer()
|
|
|
+var options = {
|
|
|
+ key: fs.readFileSync('./privatekey.pem'),
|
|
|
+ cert: fs.readFileSync('./certificate.pem')
|
|
|
+};
|
|
|
+const server = require("https").createServer(options)
|
|
|
const port = 10010
|
|
|
+const one_mode_count = 2 //1V1模式只能2人
|
|
|
+const more_mode_count = 4 //多人模式只能30人
|
|
|
+const muted = false //默认开启mic
|
|
|
+
|
|
|
const io = require("socket.io")(server, {
|
|
|
path: "/im-rtc",
|
|
|
serveClient: false,
|
|
@@ -42,21 +54,51 @@ class ClientRequest {
|
|
|
// 没有userId时新建
|
|
|
if (!this.option.userId) {
|
|
|
// 没有userId就新建
|
|
|
- this.option.userId = "user-" + (__rooms[this.option.roomId].length + 1)
|
|
|
+
|
|
|
+ this.option.userId = "user-" + new Date().getTime()
|
|
|
}
|
|
|
|
|
|
- let { role, type, roomId, userId, userName } = this.option
|
|
|
- let user = { role, type, roomId, userId, userName }
|
|
|
+ let {
|
|
|
+ role,
|
|
|
+ type,
|
|
|
+ roomId,
|
|
|
+ userId,
|
|
|
+ userName,
|
|
|
+ } = this.option
|
|
|
+ let user = {
|
|
|
+ role,
|
|
|
+ type,
|
|
|
+ roomId,
|
|
|
+ userId,
|
|
|
+ userName,
|
|
|
+ muted
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
let users = __rooms[this.option.roomId]
|
|
|
+
|
|
|
+
|
|
|
+ let count
|
|
|
+ if (this.option.mode == '1') {
|
|
|
+ count = one_mode_count
|
|
|
+ } else {
|
|
|
+ count = more_mode_count
|
|
|
+ }
|
|
|
+
|
|
|
+ if (users.length < count) {
|
|
|
+ users.push(user)
|
|
|
+ this.socket.join(this.option.roomId)
|
|
|
+ this.socket.emit("join", {
|
|
|
+ user,
|
|
|
+ users,
|
|
|
+ })
|
|
|
+ this.onUserJoin(user, users)
|
|
|
+ } else {
|
|
|
+ this.socket.emit("full")
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- users.push(user)
|
|
|
|
|
|
- this.socket.join(this.option.roomId)
|
|
|
- this.socket.emit("join", {
|
|
|
- user,
|
|
|
- users,
|
|
|
- })
|
|
|
- this.onUserJoin(user, users)
|
|
|
}
|
|
|
init() {
|
|
|
this.socket.on("disconnect", reason => this.onDisconnect(reason))
|
|
@@ -64,14 +106,31 @@ class ClientRequest {
|
|
|
|
|
|
// 通用事件
|
|
|
this.socket.on("action", data => {
|
|
|
+
|
|
|
this.socket.broadcast.to(this.option.roomId).emit("action", data)
|
|
|
})
|
|
|
+ this.socket.on("msg", data => {
|
|
|
+ this.socket.broadcast.to(this.option.roomId).emit("msg", data)
|
|
|
+ // this.socket.to(this.option.roomId).emit("msg", data)
|
|
|
+ })
|
|
|
+ this.socket.on("socket_changeMedia", data => {
|
|
|
+ this.socket.broadcast.to(this.option.roomId).emit("socket_changeMedia", data)
|
|
|
+ // io.to(this.option.roomId).emit('socket_changeMedia', data)
|
|
|
+ })
|
|
|
+ this.socket.on("webSyncAction", data => {
|
|
|
+ console.log('webSyncAction')
|
|
|
+ this.socket.broadcast.to(this.option.roomId).emit("webSyncAction", data)
|
|
|
+ // io.to(this.option.roomId).emit('socket_changeMedia', data)
|
|
|
+ })
|
|
|
+
|
|
|
|
|
|
// 踢人
|
|
|
this.socket.on("getOut", userId => this.onGetOut(userId))
|
|
|
|
|
|
// 静音
|
|
|
this.socket.on("muted", (muted, userId) => this.onMuted(muted, userId))
|
|
|
+ // 成员关闭推流后通知静音
|
|
|
+ this.socket.on("mutedChanged", (muted, userId) => io.to(this.option.roomId).emit("mutedChanged", muted, userId))
|
|
|
}
|
|
|
|
|
|
onDisconnect(reason) {
|
|
@@ -90,7 +149,9 @@ class ClientRequest {
|
|
|
|
|
|
user && this.onUserLeave(user, users)
|
|
|
}
|
|
|
- onReconnect(reason) {}
|
|
|
+ onReconnect(reason) {
|
|
|
+ consoel.log('重连了')
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 踢人
|
|
@@ -132,31 +193,37 @@ class ClientRequest {
|
|
|
} else {
|
|
|
// 设置所有参与人除主持人外静音状态
|
|
|
users.forEach(item => {
|
|
|
- if(item.role == 'leader'){
|
|
|
+ if (item.role == 'leader') {
|
|
|
return
|
|
|
}
|
|
|
item.muted = muted
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
- this.socket.broadcast.to(this.option.roomId).emit("muted", muted, userId)
|
|
|
+ io.to(this.option.roomId).emit("muted", muted, userId)
|
|
|
+ // this.socket.broadcast.to(this.option.roomId).emit("muted", muted, userId)
|
|
|
}
|
|
|
/**
|
|
|
* 通知其他用户有人加入房间
|
|
|
*/
|
|
|
onUserJoin(user, users) {
|
|
|
- this.socket.broadcast.to(this.option.roomId).emit("userJoin", { user, users })
|
|
|
+ this.socket.broadcast.to(this.option.roomId).emit("userJoin", {
|
|
|
+ user,
|
|
|
+ users
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 通知其他用户有人离开房间
|
|
|
*/
|
|
|
onUserLeave(user, users) {
|
|
|
- this.socket.broadcast.to(this.option.roomId).emit("userLeave", { user, users })
|
|
|
+ this.socket.broadcast.to(this.option.roomId).emit("userLeave", {
|
|
|
+ user,
|
|
|
+ users
|
|
|
+ })
|
|
|
console.log(`用户[${user.userId}]离开房间`)
|
|
|
}
|
|
|
|
|
|
isLeader() {
|
|
|
return this.option.role == "leader"
|
|
|
}
|
|
|
-}
|
|
|
+}
|