Quellcode durchsuchen

init status controller

gemercheung vor 3 Jahren
Ursprung
Commit
e4c94763ee

+ 9 - 0
.prettierrc

@@ -0,0 +1,9 @@
+{
+  "printWidth": 200,
+  "semi": true,
+  "vueIndentScriptAndStyle": true,
+  "trailingComma": "all",
+  "proseWrap": "never",
+  "htmlWhitespaceSensitivity": "strict",
+  "endOfLine": "auto"
+}

+ 0 - 0
combined.log


+ 64 - 0
demo/index.html

@@ -0,0 +1,64 @@
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <title>socket.io客户端</title>
+    <!-- <script src="./js/socket.io.js"></script> -->
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.1/socket.io.min.js"
+      integrity="sha512-iqRVtNB+t9O+epcgUTIPF+nklypcR23H1yR1NFM9kffn6/iBhZ9bTB6oKLaGMv8JE9UgjcwfBFg/eHC/VMws+g=="
+      crossorigin="anonymous"
+      referrerpolicy="no-referrer"
+    ></script>
+  </head>
+
+  <body>
+    <button id="startCall">startCall开始</button>
+    <button id="stopCall">stopCall结束</button>
+    <!-- <button id="send">发送消息到服务器</button> -->
+    <div>
+      <h3>服务器响应的消息:</h3>
+      <i id="msg"></i>
+    </div>
+
+    <script>
+      localStorage.debug = "socket.io-client:socket";
+      // 'http://47.115.43.159:3000'
+      // var socket = io("http://0.0.0.0:3000");
+      // const { roomId, userId, sceneNum, isClient, role, userLimitNum, roomType } = user
+      var socket = io("http://0.0.0.0:3000", {
+        path: "/test",
+        query: {
+          userId: "user_001",
+          sceneNum: "t-GusppsiKEC",
+          role: "LEADER",
+          isClient: false,
+          roomType: "normal",
+          nickName: "测试1",
+          roomId: "001",
+          myHeadUrl: "http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg",
+        },
+      });
+      socket.on("roomIn", function (data) {
+        console.log("roomIn", data);
+      });
+      socket.on("connection", function (data) {
+        console.log(data);
+      });
+
+      socket.on("action", function (data) {
+        alert("acticon", data);
+        console.log("--acticon--", data);
+      });
+
+      var startCall = document.querySelector("#startCall");
+      startCall.addEventListener("click", function () {
+        socket.emit("startCall");
+      });
+
+      var stopCall = document.querySelector("#stopCall");
+      stopCall.addEventListener("click", function () {
+        socket.emit("stopCall");
+      });
+    </script>
+  </body>
+</html>

+ 68 - 0
demo/index2.html

@@ -0,0 +1,68 @@
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <title>socket.io客户端</title>
+    <!-- <script src="./js/socket.io.js"></script> -->
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.1/socket.io.min.js"
+      integrity="sha512-iqRVtNB+t9O+epcgUTIPF+nklypcR23H1yR1NFM9kffn6/iBhZ9bTB6oKLaGMv8JE9UgjcwfBFg/eHC/VMws+g=="
+      crossorigin="anonymous"
+      referrerpolicy="no-referrer"
+    ></script>
+  </head>
+
+  <body>
+    <button id="startCall">startCall开始</button>
+    <button id="stopCall">stopCall结束</button>
+    <div>
+      <h3>服务器响应的消息:</h3>
+      <i id="msg"></i>
+    </div>
+
+    <script>
+      // 'http://47.115.43.159:3000'
+      var socket = io("http://0.0.0.0:3000", {
+        path: "/test",
+        query: {
+          userId: "user_002",
+          sceneNum: "t-GusppsiKEC",
+          role: "AGENT",
+          isClient: true,
+          roomType: "1v1",
+          nickName: "测试1",
+          roomId: "001",
+          myHeadUrl: "http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg",
+        },
+      });
+      socket.on("vr_request", function (data) {
+        alert("vr_request", data);
+        console.log(data);
+      });
+      socket.on("roomClose", function (data) {
+        console.log("roomClose", data);
+      });
+
+      socket.on("action", function (data) {
+        alert("acticon", data);
+
+        console.log("--acticon--", data);
+      });
+
+      socket.on("vr_response", function (data) {
+        let res = data;
+        alert("vr_response", `${res.customerId}: ${res.content}`);
+
+        console.log(`${res.customerId}: ${res.content}`);
+      });
+      var startCall = document.querySelector("#startCall");
+      startCall.addEventListener("click", function () {
+        socket.emit("startCall");
+      });
+
+      var stopCall = document.querySelector("#stopCall");
+      stopCall.addEventListener("click", function () {
+        socket.emit("stopCall");
+      });
+    </script>
+  </body>
+</html>

+ 63 - 0
demo/index3.html

@@ -0,0 +1,63 @@
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <title>socket.io客户端</title>
+    <!-- <script src="./js/socket.io.js"></script> -->
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.4.1/socket.io.min.js"
+      integrity="sha512-iqRVtNB+t9O+epcgUTIPF+nklypcR23H1yR1NFM9kffn6/iBhZ9bTB6oKLaGMv8JE9UgjcwfBFg/eHC/VMws+g=="
+      crossorigin="anonymous"
+      referrerpolicy="no-referrer"
+    ></script>
+  </head>
+
+  <body>
+    <button id="startCall">startCall开始</button>
+    <button id="stopCall">stopCall结束</button>
+    <div>
+      <h3>服务器响应的消息:</h3>
+      <i id="msg"></i>
+    </div>
+
+    <script>
+      // 'http://47.115.43.159:3000'
+      var socket = io("http://0.0.0.0:3000", {
+        path: "/test",
+        query: {
+          userId: "user_003",
+          sceneNum: "t-GusppsiKEC",
+          role: "AGENT",
+          isClient: true,
+          roomType: "1v1",
+          nickName: "测试3",
+          roomId: "001",
+          myHeadUrl: "http://downza.img.zz314.com/edu/pc/wlgj-1008/2016-06-23/64ec0888b15773e3ba5b5f744b9df16c.jpg",
+        },
+      });
+      socket.on("roomClose", function (data) {
+        console.log("roomClose", data);
+      });
+
+      socket.on("vr_request", function (data) {
+        alert("vr_request", data);
+        console.log(data);
+      });
+
+      socket.on("action", function (data) {
+        alert("acticon", data);
+
+        console.log("--acticon--", data);
+      });
+
+      var startCall = document.querySelector("#startCall");
+      startCall.addEventListener("click", function () {
+        socket.emit("startCall");
+      });
+
+      var stopCall = document.querySelector("#stopCall");
+      stopCall.addEventListener("click", function () {
+        socket.emit("stopCall");
+      });
+    </script>
+  </body>
+</html>

+ 0 - 0
error.log


+ 348 - 1
package-lock.json

@@ -21,13 +21,24 @@
         "recluster": "^1.0.0",
         "redis": "^4.0.2",
         "socket.io": "^4.4.1",
-        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0"
+        "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0",
+        "winston": "^3.4.0"
       },
       "optionalDependencies": {
         "bufferutil": "^4.0.6",
         "utf-8-validate": "^5.0.8"
       }
     },
+    "node_modules/@dabh/diagnostics": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
+      "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
+      "dependencies": {
+        "colorspace": "1.1.x",
+        "enabled": "2.0.x",
+        "kuler": "^2.0.0"
+      }
+    },
     "node_modules/@fastify/ajv-compiler": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz",
@@ -256,6 +267,11 @@
         "node": ">=10"
       }
     },
+    "node_modules/async": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+      "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+    },
     "node_modules/atomic-sleep": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
@@ -339,6 +355,37 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/color": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+      "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+      "dependencies": {
+        "color-convert": "^1.9.3",
+        "color-string": "^1.6.0"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "node_modules/color-string": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
+      "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
+      "dependencies": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
     "node_modules/color-support": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
@@ -347,6 +394,23 @@
         "color-support": "bin.js"
       }
     },
+    "node_modules/colors": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+      "engines": {
+        "node": ">=0.1.90"
+      }
+    },
+    "node_modules/colorspace": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+      "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
+      "dependencies": {
+        "color": "^3.1.3",
+        "text-hex": "1.0.x"
+      }
+    },
     "node_modules/component-emitter": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -444,6 +508,11 @@
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
+    "node_modules/enabled": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
+      "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
+    },
     "node_modules/engine.io": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
@@ -573,6 +642,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "node_modules/fecha": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
+      "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
+    },
     "node_modules/find-my-way": {
       "version": "4.5.1",
       "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.5.1.tgz",
@@ -592,6 +666,11 @@
       "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
       "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
     },
+    "node_modules/fn.name": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
+      "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
+    },
     "node_modules/forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -701,6 +780,11 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/is-arrayish": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+    },
     "node_modules/is-fullwidth-code-point": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -709,11 +793,27 @@
         "node": ">=8"
       }
     },
+    "node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
     },
+    "node_modules/kuler": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
+      "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
+    },
     "node_modules/light-my-request": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.7.0.tgz",
@@ -745,6 +845,18 @@
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
     },
+    "node_modules/logform": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.2.tgz",
+      "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==",
+      "dependencies": {
+        "colors": "1.4.0",
+        "fecha": "^4.2.0",
+        "ms": "^2.1.1",
+        "safe-stable-stringify": "^1.1.0",
+        "triple-beam": "^1.3.0"
+      }
+    },
     "node_modules/lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -936,6 +1048,14 @@
         "wrappy": "1"
       }
     },
+    "node_modules/one-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
+      "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
+      "dependencies": {
+        "fn.name": "1.x.x"
+      }
+    },
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -1139,6 +1259,11 @@
         "ret": "~0.2.0"
       }
     },
+    "node_modules/safe-stable-stringify": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
+      "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw=="
+    },
     "node_modules/secure-json-parse": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz",
@@ -1178,6 +1303,14 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
       "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ=="
     },
+    "node_modules/simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "dependencies": {
+        "is-arrayish": "^0.3.1"
+      }
+    },
     "node_modules/socket.io": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
@@ -1221,6 +1354,14 @@
         "flatstr": "^1.0.12"
       }
     },
+    "node_modules/stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/string_decoder": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -1274,6 +1415,11 @@
         "node": ">= 10"
       }
     },
+    "node_modules/text-hex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
+    },
     "node_modules/tiny-lru": {
       "version": "7.0.6",
       "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
@@ -1287,6 +1433,11 @@
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
       "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
     },
+    "node_modules/triple-beam": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
+      "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
+    },
     "node_modules/uid2": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
@@ -1352,6 +1503,38 @@
         "string-width": "^1.0.2 || 2 || 3 || 4"
       }
     },
+    "node_modules/winston": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/winston/-/winston-3.4.0.tgz",
+      "integrity": "sha512-FqilVj+5HKwCfIHQzMxrrd5tBIH10JTS3koFGbLVWBODjiIYq7zir08rFyBT4rrTYG/eaTqDcfSIbcjSM78YSw==",
+      "dependencies": {
+        "@dabh/diagnostics": "^2.0.2",
+        "async": "^3.2.3",
+        "is-stream": "^2.0.0",
+        "logform": "^2.3.2",
+        "one-time": "^1.0.0",
+        "readable-stream": "^3.4.0",
+        "stack-trace": "0.0.x",
+        "triple-beam": "^1.3.0",
+        "winston-transport": "^4.4.2"
+      },
+      "engines": {
+        "node": ">= 6.4.0"
+      }
+    },
+    "node_modules/winston-transport": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.2.tgz",
+      "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==",
+      "dependencies": {
+        "logform": "^2.3.2",
+        "readable-stream": "^3.4.0",
+        "triple-beam": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 6.4.0"
+      }
+    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -1384,6 +1567,16 @@
     }
   },
   "dependencies": {
+    "@dabh/diagnostics": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
+      "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
+      "requires": {
+        "colorspace": "1.1.x",
+        "enabled": "2.0.x",
+        "kuler": "^2.0.0"
+      }
+    },
     "@fastify/ajv-compiler": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz",
@@ -1570,6 +1763,11 @@
         "readable-stream": "^3.6.0"
       }
     },
+    "async": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+      "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+    },
     "atomic-sleep": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
@@ -1633,11 +1831,56 @@
       "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz",
       "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw=="
     },
+    "color": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+      "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+      "requires": {
+        "color-convert": "^1.9.3",
+        "color-string": "^1.6.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "color-string": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz",
+      "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==",
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
     "color-support": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
       "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
     },
+    "colors": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
+    },
+    "colorspace": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
+      "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
+      "requires": {
+        "color": "^3.1.3",
+        "text-hex": "1.0.x"
+      }
+    },
     "component-emitter": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
@@ -1705,6 +1948,11 @@
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
+    "enabled": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
+      "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
+    },
     "engine.io": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz",
@@ -1819,6 +2067,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "fecha": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
+      "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
+    },
     "find-my-way": {
       "version": "4.5.1",
       "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.5.1.tgz",
@@ -1835,6 +2088,11 @@
       "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
       "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
     },
+    "fn.name": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
+      "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
+    },
     "forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -1920,16 +2178,31 @@
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
       "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
     },
+    "is-arrayish": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+    },
     "is-fullwidth-code-point": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
       "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
     },
+    "is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
       "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
     },
+    "kuler": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
+      "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
+    },
     "light-my-request": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.7.0.tgz",
@@ -1959,6 +2232,18 @@
         }
       }
     },
+    "logform": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.2.tgz",
+      "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==",
+      "requires": {
+        "colors": "1.4.0",
+        "fecha": "^4.2.0",
+        "ms": "^2.1.1",
+        "safe-stable-stringify": "^1.1.0",
+        "triple-beam": "^1.3.0"
+      }
+    },
     "lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -2091,6 +2376,14 @@
         "wrappy": "1"
       }
     },
+    "one-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
+      "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
+      "requires": {
+        "fn.name": "1.x.x"
+      }
+    },
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -2225,6 +2518,11 @@
         "ret": "~0.2.0"
       }
     },
+    "safe-stable-stringify": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
+      "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw=="
+    },
     "secure-json-parse": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz",
@@ -2258,6 +2556,14 @@
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
       "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ=="
     },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "requires": {
+        "is-arrayish": "^0.3.1"
+      }
+    },
     "socket.io": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
@@ -2295,6 +2601,11 @@
         "flatstr": "^1.0.12"
       }
     },
+    "stack-trace": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+      "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+    },
     "string_decoder": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -2339,6 +2650,11 @@
         "yallist": "^4.0.0"
       }
     },
+    "text-hex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
+      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
+    },
     "tiny-lru": {
       "version": "7.0.6",
       "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
@@ -2349,6 +2665,11 @@
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
       "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
     },
+    "triple-beam": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
+      "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
+    },
     "uid2": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
@@ -2407,6 +2728,32 @@
         "string-width": "^1.0.2 || 2 || 3 || 4"
       }
     },
+    "winston": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/winston/-/winston-3.4.0.tgz",
+      "integrity": "sha512-FqilVj+5HKwCfIHQzMxrrd5tBIH10JTS3koFGbLVWBODjiIYq7zir08rFyBT4rrTYG/eaTqDcfSIbcjSM78YSw==",
+      "requires": {
+        "@dabh/diagnostics": "^2.0.2",
+        "async": "^3.2.3",
+        "is-stream": "^2.0.0",
+        "logform": "^2.3.2",
+        "one-time": "^1.0.0",
+        "readable-stream": "^3.4.0",
+        "stack-trace": "0.0.x",
+        "triple-beam": "^1.3.0",
+        "winston-transport": "^4.4.2"
+      }
+    },
+    "winston-transport": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.2.tgz",
+      "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==",
+      "requires": {
+        "logform": "^2.3.2",
+        "readable-stream": "^3.4.0",
+        "triple-beam": "^1.2.0"
+      }
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",

+ 2 - 1
package.json

@@ -23,7 +23,8 @@
     "recluster": "^1.0.0",
     "redis": "^4.0.2",
     "socket.io": "^4.4.1",
-    "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0"
+    "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0",
+    "winston": "^3.4.0"
   },
   "optionalDependencies": {
     "bufferutil": "^4.0.6",

+ 0 - 0
src/controller/heathCheckController.js


+ 107 - 89
src/controller/roomController.js

@@ -1,129 +1,147 @@
 import { pubClient } from "../connection/redis.js";
 import { ROLES, CODEMEG, EVENT } from "../enum/index.js";
 import { io } from "../core/io.js";
+import { logger } from "../core/logger.js";
 
 /**
- *  加入房间
- * @param {*} clientRoom
- * @param {*} socket
+ * 检查是否是房主
  */
-const joinRoom = ({ clientRoom, userUniqueId, roomUniqueId, user }, socket) => {
-  console.log("加入房间:", userUniqueId);
-  socket.join(clientRoom);
-  socket.broadcast.emit(EVENT.roomIn, {
-    user,
-    // roomsPerson: sortRoomUser(roomsPerson),
-    // roomsConfig: this._roomsConfig[roomId],
-  });
+const isHoster = (role) => {
+  return String(role).toLowerCase() === ROLES.LEADER;
 };
 
 /**
- * 离开房间
- * @param {*} clientRoom
- * @param {*} userUniqueId
- * @param {*} roomUniqueId
- * @param {*} socket
+ * 创建房间
+ * @param {*} roomId
+ * @param {*} userId
+ * @param {*} user
  */
-const leaveRoom = async ({
-  clientRoom,
-  userUniqueId,
-  roomUniqueId,
-  socket,
-}) => {
-  try {
-    socket.leave(clientRoom);
-    const existUser = await pubClient.hGetAll(userUniqueId);
-    if (existUser) {
-      if (String(existUser.role).toLowerCase() === ROLES.LEADER) {
-        await pubClient.del(userUniqueId);
-        await pubClient.del(roomUniqueId);
-        io.emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
-      } else {
-        await pubClient.del(userUniqueId);
-        await pubClient.hDel(roomUniqueId, userUniqueId);
-      }
 
-      console.log("disconnect user" + userUniqueId);
-    }
-  } catch (error) {
-    console.log("error", error);
+const buildRoom = async (roomId, userId, user) => {
+  const hasJoin = await pubClient.HVALS(roomId, userId);
+  if (hasJoin.length === 0) {
+    logger.log("创建房间", roomId);
+    await pubClient.hSet(roomId, userId, JSON.stringify(user));
   }
 };
 
 /**
- * 检查房主存不存在
- * @param {*} roomUniqueId
- * @param {*} socket
+ * 关闭房间
+ * @param {*} roomId
+ */
+
+const removeRoom = async (roomId) => {
+  console.log("removeRoom", roomId);
+  await pubClient.del(roomId);
+};
+
+/**
+ * 加入房间
+ * @param {*} roomId
+ * @param {*} userId
+ * @param {*} user
  */
-const watchRoomStatus = async (roomUniqueId, socket) => {
-  const watch = await pubClient.watch(roomUniqueId);
-  if (watch === "OK") {
-    checkRoomStatus(roomUniqueId, socket);
+const joinRoom = async (roomId, userId, user) => {
+  console.log("joinRoom", roomId);
+  const hasRoom = await pubClient.exists(roomId);
+  if (hasRoom) {
+    await pubClient.hSet(roomId, userId, JSON.stringify(user));
+  } else {
+    console.log("no room join");
   }
 };
+/**
+ * 离开房间
+ * @param {*} roomId
+ */
 
-const checkRoomStatus = async (roomUniqueId, socket) => {
-  const values = await pubClient.hVals(roomUniqueId);
-  if (values) {
-    console.log("room watch", roomUniqueId, values);
-    const existMaster = values.find(
-      (item) => String(JSON.parse(item).role).toLowerCase() === ROLES.LEADER
-    );
-    if (!existMaster) {
-      console.log("不存在房主");
-      setTimeout(async () => {
-        socket.emit(EVENT.roomClose, { code: 3001, msg: CODEMEG[3001] });
-        await pubClient.del(roomUniqueId);
-        await pubClient.del(`type-${roomUniqueId}`);
-      }, 1000);
-    } else {
-      const hosts = JSON.parse(existMaster);
-      console.log("存在房主", hosts.roomType);
-      if (hosts.roomType === "1v1" && values.length > 2) {
-        console.log("1v1-房间人数已满", values.length);
-        setTimeout(() => {
-          socket.emit("roomInFail", {
-            type: "full",
-            msg: "房间人数已满",
-          });
-        }, 1000);
-      }
-    }
+const leaveRoom = async (roomId, userId) => {
+  console.log("leaveRoom", roomId);
+  await pubClient.hDel(roomId, userId);
+};
+
+/**
+ *  加入房间
+ * @param {*} clientRoom
+ * @param {*} socket
+ */
+const joinRoomAction = async (roomId, userId, user, socket) => {
+  const isJoinRoom = await pubClient.hExists(roomId, userId);
+  joinRoom(roomId, userId, user);
+  if (!isJoinRoom) {
+    console.log("加入房间:", userId);
+    socket.join(roomId);
+    socket.broadcast.emit(EVENT.roomIn, {
+      user,
+      // roomsPerson: sortRoomUser(roomsPerson),
+      // roomsConfig: this._roomsConfig[roomId],
+    });
+  } else {
+    console.log("已加入房间:", userId);
   }
 };
 
+/**
+ * 离开房间
+ * @param {*} clientRoom
+ * @param {*} userUniqueId
+ * @param {*} roomUniqueId
+ * @param {*} socket
+ */
+const leaveRoomAction = async (roomId, userId, user, socket) => {
+  console.log("离开房间", userId);
+  socket.leave(roomId);
+  leaveRoom(roomId, userId);
+  socket.broadcast.emit(EVENT.roomOut, {
+    user,
+    // roomsPerson: sortRoomUser(roomsPerson),
+    // roomsConfig: this._roomsConfig[roomId],
+  });
+  leaveRoom(roomId, userId);
+};
+
 export async function roomController(socket) {
   let user = socket.handshake.query;
-  const { roomId, userId, sceneNum, isClient, role, userLimitNum, roomType } =
-    user;
+  const { roomId, userId, sceneNum, isClient, role, userLimitNum, roomType } = user;
   if (user) {
     const webRoomId = `${roomId}_${sceneNum}_web`;
-    const clientRoom = `${userId}${roomId}`;
+    // const clientRoom = `${userId}${roomId}`;
     const userUniqueId = `user-${userId}`;
     const roomUniqueId = `room-${webRoomId}`;
     if ("roomId" in user && "userId" in user) {
+      user.isLogin = true;
       await pubClient.hSet(userUniqueId, user);
-      await pubClient.hSet(
-        roomUniqueId,
-        userUniqueId,
-        JSON.stringify({
-          role: role,
-          roomType,
-          userLimitNum: userLimitNum || "",
-        })
-      );
-      joinRoom({ clientRoom, userUniqueId, roomUniqueId, user }, socket);
+      await pubClient.expire(userUniqueId, 60 * 60 * 1);
+
+      // 房主自动创建房间
+      if (isHoster(role)) {
+        buildRoom(roomUniqueId, userUniqueId, user);
+        socket.join(roomUniqueId);
+      }
     }
-    watchRoomStatus(roomUniqueId, socket);
+    // watchRoomStatus(roomUniqueId, socket);
+
+    socket.on(EVENT.startCall, startCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
+    socket.on(EVENT.stopCall, stopCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
 
     socket.on("disconnect", () => {
-      leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
+      // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
       // watchRoomWithMaster(roomUniqueId, socket);
     });
     socket.on("reconnect", () => {
       console.log("reconnect");
-      // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
-      // watchRoomWithMaster(roomUniqueId, socket);
     });
   }
 }
+
+const startCallAction = (roomId, userId, user, socket) => {
+  if (!isHoster(user.role)) {
+    joinRoomAction(roomId, userId, user, socket);
+  }
+};
+
+const stopCallAction = (roomId, userId, user, socket) => {
+  if (!isHoster(user.role)) {
+    leaveRoomAction(roomId, userId, user, socket);
+  }
+};

+ 40 - 0
src/controller/roomStatusController.js

@@ -0,0 +1,40 @@
+/**
+ * 检查房主存不存在
+ * @param {*} roomUniqueId
+ * @param {*} socket
+ */
+const watchRoomStatus = async (roomUniqueId, socket) => {
+  const watch = await pubClient.watch(roomUniqueId);
+  if (watch === "OK") {
+    checkRoomStatus(roomUniqueId, socket);
+  }
+};
+
+const checkRoomStatus = async (roomUniqueId, socket) => {
+  const values = await pubClient.hVals(roomUniqueId);
+  if (values) {
+    console.log("room watch", roomUniqueId, values);
+    const existMaster = values.find((item) => String(JSON.parse(item).role).toLowerCase() === ROLES.LEADER);
+    if (!existMaster) {
+      console.log("不存在房主");
+      setTimeout(async () => {
+        socket.emit(EVENT.roomClose, { code: 3001, msg: CODEMEG[3001] });
+        await pubClient.del(roomUniqueId);
+        await pubClient.del(`type-${roomUniqueId}`);
+      }, 1000);
+    } else {
+      const hosts = JSON.parse(existMaster);
+      console.log("存在房主", hosts.roomType);
+      if (hosts.roomType === "1v1" && values.length > 2) {
+        console.log("1v1-房间人数已满", values.length);
+        setTimeout(() => {
+          socket.emit("roomInFail", {
+            type: "full",
+            msg: "房间人数已满",
+          });
+        }, 1000);
+      }
+    }
+  }
+};
+export async function roomStatusController(roomId, socket) {}

+ 0 - 0
src/controller/userController.js


+ 2 - 1
src/core/cluster.js

@@ -6,6 +6,7 @@ import { io } from "./io.js";
 import http from "http";
 import { Server } from "socket.io";
 import { controller } from "../controller/index.js";
+import { logger } from "../core/logger.js";
 
 const numCPUs = os.cpus().length;
 
@@ -38,7 +39,7 @@ export class CoreCluster {
         cluster.fork();
       }
       cluster.on("exit", (worker) => {
-        console.log(`Worker ${worker.process.pid} died`);
+        logger.log(`Worker ${worker.process.pid} died`);
         cluster.fork();
       });
       cluster.on("online", (worker) => {

+ 16 - 0
src/core/logger.js

@@ -0,0 +1,16 @@
+import winston from "winston";
+
+const logger = winston.createLogger({
+  level: "info",
+  format: winston.format.json(),
+  defaultMeta: { service: "user-service" },
+  transports: [
+    //
+    // - Write all logs with importance level of `error` or less to `error.log`
+    // - Write all logs with importance level of `info` or less to `combined.log`
+    //
+    new winston.transports.File({ filename: "error.log", level: "error" }),
+    new winston.transports.File({ filename: "combined.log" }),
+  ],
+});
+export { logger };

+ 1 - 0
src/enum/event.js

@@ -9,6 +9,7 @@ const EVENT = {
   roomClose: "roomClose", // 房间已结束/房主已离开
   roomInFail: "roomInFail", // 房间人数已满
   roomIn: "roomIn", // 通知设备成功进入房间
+  roomOut: "roomOut", // 通知设备成功进入房间
   changeVoiceStatus: "changeVoiceStatus", // 通知某设备语音状态
   changeOnlineStatus: "changeOnlineStatus", // 通知某设备的在线状态
   roomPersonChange: "roomPersonChange", // 房间人数变化事件