瀏覽代碼

feat(socket.io): udpate

gemercheung 3 年之前
父節點
當前提交
7ba76ba95a

+ 1 - 1
.env.development

@@ -1,5 +1,5 @@
 PORT=12000
-SOCKET_PORT=5000
+SOCKET_PORT=12000
 CONTAINER_NAME='socket-chat-IM'
 VOLUME_DIR=./data
 REDIS_HOST=127.0.0.1

文件差異過大導致無法顯示
+ 2033 - 2
demo/socket.io.min.js


文件差異過大導致無法顯示
+ 7 - 0
demo/socket.io.min.msgpack.js


+ 11 - 0
package-lock.json

@@ -22,6 +22,7 @@
         "redis": "^4.0.2",
         "socket.io": "^4.4.1",
         "socket.io-msgpack-parser": "^3.0.1",
+        "tls-sig-api-v2": "^1.0.2",
         "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0",
         "winston": "^3.4.0"
       },
@@ -1598,6 +1599,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/tls-sig-api-v2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/tls-sig-api-v2/-/tls-sig-api-v2-1.0.2.tgz",
+      "integrity": "sha512-LJjc3pFJMv45eoEnY7qv/ZdMg06Rb+8zZtyM5inTlteA3KkMIw5buJmFtZFmkmQQAaLXOjFHAfY+S4giaoTpDw=="
+    },
     "node_modules/tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -2999,6 +3005,11 @@
       "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz",
       "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow=="
     },
+    "tls-sig-api-v2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/tls-sig-api-v2/-/tls-sig-api-v2-1.0.2.tgz",
+      "integrity": "sha512-LJjc3pFJMv45eoEnY7qv/ZdMg06Rb+8zZtyM5inTlteA3KkMIw5buJmFtZFmkmQQAaLXOjFHAfY+S4giaoTpDw=="
+    },
     "tr46": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",

+ 1 - 0
package.json

@@ -25,6 +25,7 @@
     "redis": "^4.0.2",
     "socket.io": "^4.4.1",
     "socket.io-msgpack-parser": "^3.0.1",
+    "tls-sig-api-v2": "^1.0.2",
     "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.4.0",
     "winston": "^3.4.0"
   },

+ 18 - 0
src/config/appid.js

@@ -0,0 +1,18 @@
+export default {
+  shop: {
+    appid: "1400431163",
+    key: "8de69820eb514e29ea3c6643f546478cbfe1b609ad3a904e64d13a7f38b5328d",
+  },
+  vrhouse: {
+    appid: "1400433526",
+    key: "6de58833e126d2bf6682997ead07950bc0bda694b267883a6b35a4ba342da0c4",
+  },
+  fashilong: {
+    appid: "1400450635",
+    key: "f0bb5717fe83688fe1d26826be7cae482269812ef2f0ecf25746dee618487140",
+  },
+  zhuisu: {
+    appid: "1400458585",
+    key: "fe3db36896e1fbc93a3dea6dd3deb193f546bf165e2e5b3335546f71d020391d",
+  },
+};

+ 0 - 22
src/controller/basicController.js

@@ -3,29 +3,7 @@ import { EVENT } from "../enum/event.js";
 import { roomController } from "./roomController.js";
 import { syncActionController } from "./syncActionController.js";
 
-// const clientSyncAction = (socket) => {
-//   socket.on(EVENT.clientSyncAction, (data) => {
-//     socket.broadcast.to(clientRoom).emit(EVENT.clientSyncAction, data);
-//   });
-// };
-// const webSyncAction = (socket) => {
-//   socket.on(EVENT.webSyncAction, (data) => {
-//     socket.broadcast.to(webRoomId).emit(EVENT.webSyncAction, data);
-//   });
-// };
-const action = (socket) => {
-  socket.on(EVENT.action, (data) => {
-    socket.broadcast.to(roomId).emit(EVENT.action, data);
-  });
-};
 export async function basicController(socket) {
-  //   socket.use(([event, ...args], next) => {
-  //     if (isUnauthorized(event)) {
-  //       return next(new Error("unauthorized event"));
-  //     }
-  //     next();
-  //   });
-
   //   webSyncAction(socket);
   await roomController(socket);
   await syncActionController(socket);

+ 28 - 5
src/controller/roomController.js

@@ -4,6 +4,7 @@ import { io } from "../core/io.js";
 import { logger } from "../core/logger.js";
 import { updateUser, removeRoomAllUsers } from "../service/userService.js";
 import { watchRoomService } from "../service/watchRoomService.js";
+import { getSig } from "../core/getSig.js";
 
 /**
  * 检查是否是房主
@@ -116,15 +117,19 @@ const closeRoomAction = async (roomId, userId, user, socket) => {
 };
 export async function roomController(socket) {
   let user = socket.handshake.query;
-  const { roomId, userId, sceneNum, isClient, role, userLimitNum, roomType, from } = user;
+  const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from } = user;
   if (user) {
     // const webRoomId = `${roomId}_${sceneNum}_web`;
     // const clientRoom = `${userId}${roomId}`;
+    const oneSceneNum = sceneNumber || sceneNum;
     const userUniqueId = `user-${userId}`;
-    const roomUniqueId = `room-${roomId}_${sceneNum}_web`;
+    const roomUniqueId = `room-${roomId}_${oneSceneNum}_web`;
     // const userLimitNum = userLimitNum || process.env.US
     if ("roomId" in user && "userId" in user) {
-      const userObj = { ...user, isConnected: true };
+      console.log("getSig", getSig(userId));
+      user.sig = getSig(userId);
+      const userObj = { ...user, isConnected: true, roomType: roomType || "" };
+
       updateUser(userUniqueId, userObj);
       // await pubClient.hSet(userUniqueId, user);
       // await pubClient.expire(userUniqueId, 60 * 60 * 24);
@@ -143,12 +148,19 @@ export async function roomController(socket) {
 
     socket.on(EVENT.startCall, startCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
     socket.on(EVENT.stopCall, stopCallAction.bind(null, roomUniqueId, userUniqueId, user, socket));
-
+    socket.onAny((event) => {
+      console.log(`got ${event}`);
+    });
     socket.on("disconnect", (reason) => {
       // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
       // watchRoomWithMaster(roomUniqueId, socket);
       console.log("reason", reason);
-      disconnectAction(roomUniqueId, userUniqueId, socket, user);
+      if (reason === "transport close") {
+        // 主动离开
+      } else {
+        // 被动离开
+        disconnectAction(roomUniqueId, userUniqueId, socket, user);
+      }
     });
     socket.on("reconnect", () => {
       console.log("reconnect");
@@ -162,6 +174,7 @@ const disconnectAction = async (roomId, userId, socket, user) => {
 };
 
 const startCallAction = async (roomId, userId, user, socket) => {
+  console.log("startCallAction");
   if (!isHoster(user.role)) {
     joinRoomAction(roomId, userId, user, socket);
   } else {
@@ -171,6 +184,16 @@ const startCallAction = async (roomId, userId, user, socket) => {
       buildRoom(roomId, userId, user);
     }
   }
+  user.isInRoom = true;
+  socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
+    user,
+    roomsPerson: [user],
+  });
+  socket.emit(EVENT.roomIn, {
+    user,
+    roomsPerson: [user],
+    roomsConfig: {},
+  });
 };
 
 const stopCallAction = (roomId, userId, user, socket) => {

+ 8 - 1
src/controller/syncActionController.js

@@ -3,7 +3,6 @@ import { pubClient } from "../connection/redis.js";
 import { ROLES, CODEMEG, EVENT } from "../enum/index.js";
 
 const joinSyncClient = async (syncId, userId, from, socket) => {
-  //   socket.join(syncId);
   logger.debug("syncId", { syncId, userId, from });
   try {
     await pubClient.hSet(syncId, from, userId);
@@ -26,6 +25,14 @@ export async function syncActionController(socket) {
       //console.log(data, 'clientSyncAction')
       socket.broadcast.to(syncId).emit(EVENT.clientSyncAction, data);
     });
+    socket.on(EVENT.action, (data) => {
+      //console.log(data, 'clientSyncAction')
+      socket.broadcast.to(syncId).emit(EVENT.action, data);
+    });
+    socket.on(EVENT.webSyncAction, (data) => {
+      console.log("syncActionController-webSyncAction", data);
+      socket.broadcast.to(syncId).emit(EVENT.webSyncAction, data);
+    });
 
     socket.on(EVENT.changeVoiceStatus, (data) => {
       socket.broadcast.to(syncId).emit(EVENT.changeVoiceStatus, data);

+ 8 - 0
src/core/getSig.js

@@ -0,0 +1,8 @@
+import TLSSigAPIv2 from "tls-sig-api-v2";
+
+import appids from "../config/appid.js";
+const api = new TLSSigAPIv2.Api(appids.fashilong.appid, appids.fashilong.key);
+
+export const getSig = (userId) => {
+  return api.genSig(userId, 86400);
+};

+ 3 - 2
src/enum/fromType.js

@@ -1,6 +1,7 @@
 const FROMTYPE = {
-  H5: 0,
-  MiniAPP: 1,
+  base: 0,
+  H5: 1,
+  MiniAPP: 2,
 };
 
 export { FROMTYPE };