فهرست منبع

feat:完善socket带看逻辑

jinx 4 سال پیش
والد
کامیت
340986f978
3فایلهای تغییر یافته به همراه88 افزوده شده و 19 حذف شده
  1. 2 0
      .gitignore
  2. 86 19
      daikan/rtc-live.js
  3. 0 0
      test/js/socket.io.new.min.js

+ 2 - 0
.gitignore

@@ -21,5 +21,7 @@ yarn-error.log*
 *.sln
 *.sw?
 *.bak
+*.csr
+*.pem
 /release-fix.bat
 /docs/html

+ 86 - 19
daikan/rtc-live.js

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

test/js/socket.io.min.js → test/js/socket.io.new.min.js