gemercheung 3 năm trước cách đây
mục cha
commit
7465a2f5c3

+ 0 - 1
.env

@@ -11,7 +11,6 @@ REDIS_PASSWORD=s1mpl3
 REDIS_DB=2
 WATCH_USER=4dage
 WATCH_PASSWORD=4dage168.
-USER_LIMIT=50
 LOGGER_PATH=
 
 

+ 2 - 1
.env.development

@@ -4,7 +4,8 @@ CONTAINER_NAME='socket-chat-IM'
 VOLUME_DIR=./data
 REDIS_HOST=127.0.0.1
 REDIS_PORT=6379
+REDIS_DB=10
 REDIS_PASSWORD=redis9394
 WATCH_USER=4dage
 WATCH_PASSWORD=4dage168.
-USER_LIMIT=30
+

+ 0 - 1
.env.production

@@ -10,7 +10,6 @@ REDIS_USER=redis
 REDIS_PASSWORD=s1mpl3
 WATCH_USER=4dage
 WATCH_PASSWORD=4dage168.
-USER_LIMIT=50
 LOGGER_PATH=/home/spugData/logs/
 
 

+ 3 - 2
package.json

@@ -4,8 +4,8 @@
   "description": "",
   "main": "index.js",
   "scripts": {
-    "start": "cross-env NODE_ENV=development silent=true node index.js",
-    "start:debug": "cross-env NODE_ENV=development npx nodemon index.js",
+    "start": "cross-env NODE_ENV=development silent=true node index.js --debug 0.0.0.0:9229",
+    "start:debug": "cross-env NODE_ENV=development npx nodemon index.js --debug 0.0.0.0:9229",
     "production": "cross-env NODE_ENV=production node index.js"
   },
   "type": "module",
@@ -17,6 +17,7 @@
     "@socket.io/cluster-adapter": "^0.1.0",
     "@socket.io/redis-adapter": "^7.1.0",
     "@socket.io/sticky": "^1.0.1",
+    "axios": "^0.27.2",
     "bcrypt": "^5.0.1",
     "bcryptjs": "^2.4.3",
     "dotenv-flow": "^3.2.0",

+ 9 - 3
src/connection/redis.js

@@ -1,12 +1,18 @@
 import { createClient } from "redis";
 import cluster from "cluster";
 import { logger } from "../core/logger.js";
+let redisUrl
+if (process.env.REDIS_PASSWORD){
+  redisUrl = `redis://:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/${process.env.REDIS_DB}`;
 
-const url = `redis://:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/${process.env.REDIS_DB}`;
+}else{
+  redisUrl = `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/${process.env.REDIS_DB}`;
+
+}
 if (cluster.isPrimary) {
-  logger.info("redis", { url });
+  logger.info("redis", redisUrl);
 }
-const pubClient = createClient({ url: url });
+const pubClient = createClient({ url: redisUrl });
 
 pubClient.on("ready", () => {
   // console.log("pubClient-ready");

+ 0 - 10
src/controller/dump/basicsController.js

@@ -1,10 +0,0 @@
-import { pubClient } from "../connection/redis.js";
-import { EVENT } from "../enum/event.js";
-import { roomController } from "./roomController.js";
-import { syncActionController } from "./syncActionController.js";
-
-export async function basicController(socket) {
-  //   webSyncAction(socket);
-  await roomController(socket);
-  await syncActionController(socket);
-}

+ 0 - 199
src/controller/dump/roomActionController.js

@@ -1,199 +0,0 @@
-import { pubClient } from "../connection/redis.js";
-import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
-import { io } from "../core/io.js";
-import { logger } from "../core/logger.js";
-import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../service/userService.js";
-import { watchRoomService } from "../service/watchRoomService.js";
-import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
-import { getSig } from "../core/getSig.js";
-
-/**
- * 检查是否是房主
- */
-const isHoster = (role) => {
-  return String(role).toLowerCase() === ROLES.LEADER;
-};
-
-/**
- * 创建房间
- * @param {*} roomId
- * @param {*} userId
- * @param {*} user
- */
-
-const buildRoom = async (roomId, userId, user) => {
-  const hasJoin = await pubClient.HVALS(roomId, userId);
-  if (hasJoin.length === 0) {
-    logger.info("buildRoom", { roomId });
-    await pubClient.hSet(roomId, userId, JSON.stringify(user));
-  }
-};
-
-/**
- * 关闭房间
- * @param {*} roomId
- */
-
-const removeRoom = async (roomId) => {
-  logger.info("removeRoom", { roomId });
-  await pubClient.del(roomId);
-};
-
-/**
- * 加入房间
- * @param {*} roomId
- * @param {*} userId
- * @param {*} user
- */
-const joinRoom = async (roomId, userId, user) => {
-  logger.info("joinRoom", { roomId });
-  try {
-    const hasRoom = await pubClient.exists(roomId);
-    if (hasRoom) {
-      await pubClient.hSet(roomId, userId, JSON.stringify(user));
-    } else {
-      logger.info("no room join");
-    }
-    return Promise.resolve();
-  } catch (error) {
-    logger.error(error);
-    return Promise.reject(error);
-  }
-};
-
-/**
- * 离开房间
- * @param {*} roomId
- */
-
-const leaveRoom = async (roomId, userId) => {
-  logger.info("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);
-  await joinRoom(roomId, userId, user);
-  if (!isJoinRoom) {
-    logger.info("加入房间 :", { userId, roomId, user });
-    socket.join(roomId);
-    const AllRoomUsers = await getAllRoomUsers(roomId);
-    const roomConfig = await getRoomConfig(roomId);
-    socket.broadcast.emit(EVENT.roomIn, {
-      user,
-      roomsPerson: AllRoomUsers,
-      roomsConfig: roomConfig,
-    });
-  } else {
-    logger.info(`已加入房间 :`, { userId });
-  }
-};
-/**
- * 离开房间
- * @param {*} clientRoom
- * @param {*} userUniqueId
- * @param {*} roomUniqueId
- * @param {*} socket
- */
-const leaveRoomAction = async (roomId, userId, user, socket) => {
-  logger.info("离开房间", userId);
-  await leaveRoom(roomId, userId);
-  const AllRoomUsers = await getAllRoomUsers(roomId);
-  const roomConfig = await getRoomConfig(roomId);
-  socket.broadcast.to(roomId).emit(EVENT.roomOut, {
-    user,
-    roomsPerson: AllRoomUsers,
-    roomsConfig: roomConfig,
-  });
-  socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, {
-    user,
-    roomsPerson: AllRoomUsers,
-  });
-  await socket.leave(roomId);
-};
-
-/**
- * 房主关闭房间
- * @param {*} clientRoom
- * @param {*} userUniqueId
- * @param {*} roomUniqueId
- * @param {*} socket
- */
-const closeRoomAction = async (roomId, userId, user, socket) => {
-  logger.info("房主关闭房间", userId);
-  console.log("isInRoom", socket.rooms.has(roomId));
-  socket.broadcast.to(roomId).emit(EVENT.roomClose, { code: 3002, msg: CODEMEG[3002] });
-  await removeRoomAllUsers(roomId);
-  socket.leave(roomId);
-};
-
-const shotGunLeaveAction = async (ids, socket, user) => {
-  console.log("主动离开");
-  const { syncId, roomId, userId } = ids;
-  socket.leave(syncId);
-  socket.leave(roomId);
-  await pubClient.del(syncId);
-  await pubClient.del(userId);
-
-  // if (isHoster(user.role)) {
-  //   await pubClient.del(roomId);
-  // }
-};
-
-const disconnectAction = async (ids, socket, user) => {
-  const { roomId, userId } = ids;
-  const userObj = { ...user, isConnected: false };
-  updateUser(userId, userObj);
-  watchRoomService(roomId, userId, socket);
-};
-
-const startCallAction = async (roomId, userId, user, socket) => {
-  try {
-    if (!isHoster(user.role)) {
-      console.log("不是房主");
-      await joinRoomAction(roomId, userId, user, socket);
-    } else {
-      const hasRoom = await pubClient.hVals(roomId);
-      if (hasRoom.length === 0) {
-        logger.debug("房主主动创建房间 :", { roomId, userId });
-        await buildRoom(roomId, userId, user);
-      } else {
-        logger.debug("房主已存在房间 :", { roomId, userId });
-      }
-    }
-    user.isInRoom = true;
-    const AllRoomUsers = await getAllRoomUsers(roomId);
-    const roomConfig = await getRoomConfig(roomId);
-    await updateRoomUser(roomId, userId, user);
-    logger.info("roomId", roomId);
-    logger.info("AllRoomUsers", AllRoomUsers.length);
-
-    socket.emit(EVENT.roomIn, {
-      user,
-      roomsPerson: AllRoomUsers,
-      roomsConfig: roomConfig,
-    });
-    socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, {
-      user,
-      roomsPerson: AllRoomUsers,
-    });
-  } catch (error) {
-    // console.error("startCallAction:", error);
-    logger.error("startCallAction:", error);
-  }
-};
-
-const stopCallAction = (roomId, userId, user, socket) => {
-  if (!isHoster(user.role)) {
-    leaveRoomAction(roomId, userId, user, socket);
-  } else {
-    closeRoomAction(roomId, userId, user, socket);
-  }
-};
-
-export { isHoster, buildRoom, startCallAction, stopCallAction, joinRoomAction, leaveRoomAction, shotGunLeaveAction, disconnectAction };

+ 0 - 138
src/controller/dump/roomController.js

@@ -1,138 +0,0 @@
-import { pubClient } from "../connection/redis.js";
-import { ROLES, CODEMEG, EVENT, FROMTYPE } from "../enum/index.js";
-import { io } from "../core/io.js";
-import { logger } from "../core/logger.js";
-import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../service/userService.js";
-import { watchRoomService } from "../service/watchRoomService.js";
-import { setRoomConfig, getRoomConfig } from "../service/roomConfigService.js";
-import { getSig } from "../core/getSig.js";
-import { isHoster, buildRoom, startCallAction, stopCallAction, joinRoomAction, leaveRoomAction, shotGunLeaveAction, disconnectAction } from "./roomActionController.js";
-import { RoomAssistantController } from './roomAssistantController.js'
-
-export async function roomController(socket) {
-  try {
-    let user = socket.handshake.query;
-    const roomAssistant = new RoomAssistantController(socket)
-    const { roomId, userId, sceneNum, isClient, role, userLimitNum, sceneNumber, roomType, from, enableTalk } = user;
-    if (user) {
-      const oneSceneNum = sceneNumber || sceneNum;
-      const syncId = `sync-${oneSceneNum}-${userId}`;
-      const roomSessionId  = `${oneSceneNum}-${userId}`;
-      console.log('roomSessionId', roomSessionId);
-      const userUniqueId = `user-${userId}`;
-      const uRoomId = await roomAssistant.prepearRoom(roomSessionId,roomId);
-      const roomUniqueId = `room-${uRoomId}_${oneSceneNum}_web`;
-      console.log('roomUniqueId',roomUniqueId)
-  
-      // const userLimitNum = userLimitNum || process.env.US
-      if ("roomId" in user && "userId" in user) {
-        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);
-        if (isHoster(role)) {
-          if ([FROMTYPE.MiniAPP].includes(Number(from))) {
-            await setRoomConfig(roomUniqueId, {
-              userLimitNum,
-              enableTalk: enableTalk === "true" ? true : false,
-            });
-          }
-        }
-        socket.join(roomUniqueId);
-      } else {
-        logger.info("user-query-不存在 :", socket.handshake.query);
-        socket.disconnect();
-      }
-  
-      socket.on(EVENT.action, (data) => {
-        console.log("room-action", roomUniqueId, socket.rooms.has(roomUniqueId), JSON.stringify(data));
-        if (socket.rooms.has(roomUniqueId)) {
-          socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
-        } else {
-          logger.error("action 事件不在房间内", user);
-        }
-      });
-  
-      // 通知 baseView 减少大量通知
-      socket.on(EVENT.webSyncAction, (data) => {
-        // socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
-        if ([FROMTYPE.base].includes(Number(from))) {
-          socket.broadcast.to(roomUniqueId).emit(EVENT.webSyncAction, data);
-        }
-      });
-  
-      socket.onAny((event, data) => {
-        if (event !== "webSyncAction") {
-          console.log(`onAny:get ${event}, data:${JSON.stringify(data)}`);
-        }
-      });
-  
-    
-      socket.on(EVENT.changeRoomEnableTalk, async (data) => {
-        // this._roomsConfig[roomId].enableTalk = data;
-        await setRoomConfig(roomUniqueId, data);
-        const roomConfig = await getRoomConfig(roomUniqueId);
-        socket.broadcast.to(roomUniqueId).emit(EVENT.changeRoomEnableTalk, roomConfig);
-      });
-  
-      socket.on(EVENT.changeOnlineStatus, async (data) => {
-        user.onlineStatus = data.status;
-        const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
-        await updateRoomUser(roomUniqueId, userUniqueId, user);
-        let actionName = user.onlineStatus ? "inRoom" : "leaveRoom";
-        logger.info("changeOnlineStatus", user);
-        socket.broadcast.to(roomUniqueId).emit(EVENT.roomPersonChange, {
-          roomsPerson: AllRoomUsers,
-          actionName,
-          user,
-        });
-      });
-  
-      socket.on(EVENT.startCall, () => {
-        startCallAction(roomUniqueId, userUniqueId, user, socket);
-      });
-      socket.on(EVENT.stopCall, () => {
-        stopCallAction(roomUniqueId, userUniqueId, user, socket);
-      });
-  
-      socket.on("disconnect", async (reason) => {
-        // leaveRoom({ clientRoom, userUniqueId, roomUniqueId, socket });
-        // watchRoomWithMaster(roomUniqueId, socket);
-        console.log("reason", reason);
-        if (reason === "transport close") {
-          // 主动离开
-          shotGunLeaveAction(
-            {
-              syncId,
-              roomId: roomUniqueId,
-              userId: userUniqueId,
-            },
-            socket,
-            user,
-          );
-        } else {
-          // 被动离开
-          // disconnectAction(
-          //   {
-          //     syncId,
-          //     roomId: roomUniqueId,
-          //     userId: userUniqueId,
-          //   },
-          //   socket,
-          //   user,
-          // );
-        }
-      });
-      socket.on("reconnect", () => {
-        console.log("reconnect");
-      });
-    }
-    
-  } catch (error) {
-    console.log('roomController::error',error)
-    
-  }
- 
-}

+ 0 - 42
src/controller/dump/roomStatusController.js

@@ -1,42 +0,0 @@
-import { logger } from "../core/logger";
-
-/**
- * 检查房主存不存在
- * @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) {
-      logger.info("不存在房主", roomUniqueId);
-      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 - 55
src/controller/dump/syncActionController.js

@@ -1,55 +0,0 @@
-import { logger } from "../../core/logger.js.js.js";
-import { pubClient } from "../../connection/redis.js.js.js";
-import { ROLES, CODEMEG, EVENT } from "../../enum/index.js.js.js";
-import { getAllRoomUsers, updateRoomUser } from "../../service/userService.js.js.js";
-
-const joinSyncClient = async (syncId, userId, from, socket) => {
-  logger.debug("syncId", { syncId, userId, from });
-  try {
-    await pubClient.hSet(syncId, from, userId);
-    socket.join(syncId);
-  } catch (error) {
-    logger.error("joinSyncClient", error);
-  }
-};
-
-export async function syncActionController(socket) {
-  let user = socket.handshake.query;
-  const { roomId, userId, sceneNum, sceneNumber, isClient, role, userLimitNum, roomType, from } = user;
-  const oneSceneNum = sceneNumber || sceneNum;
-  // const syncId = `sync-${userId}-${roomId}`;
-  const syncId = `sync-${oneSceneNum}-${userId}`;
-  const roomUniqueId = `room-${roomId}_${oneSceneNum}_web`;
-  const userUniqueId = `user-${userId}`;
-  if (user) {
-    if ("roomId" in user && "userId" in user) {
-      joinSyncClient(syncId, userId, from, socket);
-    }
-    socket.on(EVENT.clientSyncAction, (data) => {
-      socket.broadcast.to(syncId).emit(EVENT.clientSyncAction, data);
-    });
-
-    // 三体一端反传给房间
-    // socket.on(EVENT.action, (data) => {
-    //   //console.log(data, 'clientSyncAction')
-    //   console.log("syncId-action");
-    //   socket.broadcast.to(roomUniqueId).emit(EVENT.action, data);
-    // });
-
-    socket.on(EVENT.changeVoiceStatus, async (data) => {
-      socket.broadcast.to(syncId).emit(EVENT.changeVoiceStatus, data);
-      const updateUser = {
-        ...user,
-        voiceStatus: data.status,
-      };
-      const isUpdate = await updateRoomUser(roomUniqueId, userUniqueId, updateUser);
-      const AllRoomUsers = await getAllRoomUsers(roomUniqueId);
-      logger.info("changeVoiceStatus", { roomId: roomUniqueId, data, AllRoomUsers: AllRoomUsers.length });
-
-      socket.broadcast.to(roomUniqueId).emit(EVENT.changeVoiceStatus, {
-        user: user,
-        roomsPerson: AllRoomUsers,
-      });
-    });
-  }
-}

+ 10 - 5
src/controller/room/assistant.js

@@ -29,15 +29,20 @@ export class RoomAssistant {
   }
 
   /**
-   *
+   * kickPersion LEADER or assistant 房主或助手
    */
-  kickPersion() {}
+  async kickPersion(roomId, userId) {
+    const hasJoin = await this.redis.HVALS(roomId, userId);
+    if (hasJoin.length > 0) {
+      await this.redis.hDel(roomId, userId);
+    }
+  }
 
   /**
    * 创建房间  LEADER or assistant 房主或助手
-   * @param {*} roomId
-   * @param {*} userId
-   * @param {*} user
+   * @param {*string} roomId
+   * @param {*string} userId
+   * @param {*Object} user
    */
 
   async buildRoom(roomId, userId, user) {

+ 33 - 0
src/http/index.js

@@ -0,0 +1,33 @@
+import axios from "axios";
+
+const http = axios.create({
+  baseURL: "",
+  timeout: 20 * 10000,
+});
+
+http.interceptors.request.use(
+  function (config) {
+    // Do something before request is sent
+    return config;
+  },
+  function (error) {
+    // Do something with request error
+    return Promise.reject(error);
+  },
+);
+
+// Add a response interceptor
+http.interceptors.response.use(
+  function (response) {
+    // Any status code that lie within the range of 2xx cause this function to trigger
+    // Do something with response data
+    return response;
+  },
+  function (error) {
+    // Any status codes that falls outside the range of 2xx cause this function to trigger
+    // Do something with response error
+    return Promise.reject(error);
+  },
+);
+
+export { http };

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 2197 - 0
yarn.lock