gemercheung 3 年之前
父节点
当前提交
77cf490895
共有 3 个文件被更改,包括 47 次插入21 次删除
  1. 2 2
      .env.development
  2. 21 5
      src/controller/connectController.js
  3. 24 14
      src/controller/room/assistant.js

+ 2 - 2
.env.development

@@ -2,10 +2,10 @@ PORT=12001
 SOCKET_PORT=12001
 CONTAINER_NAME='socket-chat-IM'
 VOLUME_DIR=./data
-REDIS_HOST=47.113.81.43
+REDIS_HOST=127.0.0.1
 REDIS_PORT=6379
 REDIS_DB=10
-REDIS_PASSWORD=4dkk2022projectzfb
+REDIS_PASSWORD=redis9394
 WATCH_USER=4dage
 WATCH_PASSWORD=4dage168.
 

+ 21 - 5
src/controller/connectController.js

@@ -2,6 +2,7 @@ import { BasicController } from "./basicController.js";
 import { RoomController } from "./room/index.js";
 import { SyncDeviceController } from "./syncDeviceController.js";
 import { FROMTYPE } from "../enum/index.js";
+import { updateRoomUser } from "../service/userService.js";
 
 export class ConnectController extends BasicController {
   constructor(...args) {
@@ -13,18 +14,33 @@ export class ConnectController extends BasicController {
     await this.roomController.run();
     await this.syncDeviceController.run();
 
-    this.socket.on("disconnect", (reason) => {
+    this.socket.on("disconnect", async (reason) => {
       const res = String(reason).split(" ");
       console.log("disconnect-reason", res);
 
       // if (res.includes("close") || res.includes("disconnect")) {
       if ([FROMTYPE.MiniAPP].includes(Number(this.roomController.user.from))) {
-        this.roomController.logger.info("断开连接", { userId: this.roomController.userId, from: this.roomController.user.from });
-        this.roomController.roomAssistant.setRoomAvailableBySeconds(this.roomController.sessionId, 3 * 60);
+        const userId = this.roomController.userId;
+        const from = this.roomController.user.from;
+        const roomId = this.roomController.user.roomId;
+        const role = this.roomController.user.role;
+        const user = this.roomController.user;
+        this.roomController.logger.info("断开连接", {
+          userId,
+          from,
+          roomId,
+        });
+        if (this.roomController.isHoster(role)) {
+          user.onlineStatus = 0;
+          await updateRoomUser(roomId, userId, user);
+          this.roomController.roomAssistant.notifyUsersChange(roomId, user, false);
+          // await updateRoomUser(this.roomController.user);
+        }
+        // this.roomController.roomAssistant.setRoomAvailableBySeconds(this.roomController.sessionId, 3 * 60);
         // this.roomController.roomAssistant.disconnect();
-        this.roomController.roomAssistant.unWatchRoomExpired();
+        // this.roomController.roomAssistant.unWatchRoomExpired();
+        // }
       }
-      // }
     });
   }
 }

+ 24 - 14
src/controller/room/assistant.js

@@ -1,6 +1,6 @@
 // 房间行为助手
 import { EVENT, CODEMEG, FROMTYPE } from "../../enum/index.js";
-import { getCurrentUser, updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../../service/userService.js";
+import { getCurrentUser, updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser, removeRoomUser } from "../../service/userService.js";
 import { setRoomConfig, getRoomConfig, isRoomMaster } from "../../service/roomConfigService.js";
 import { subClient } from "../../connection/redis.js";
 
@@ -38,9 +38,9 @@ export class RoomAssistant {
    */
   async kickPersion(roomId, userId) {
     console.log("kickPersion", roomId, userId);
-    getInKey(roomId)
+    getInKey(roomId);
     try {
-      const hasJoin = await this.redis.HVALS( getInKey(roomId), userId);
+      const hasJoin = await this.redis.HVALS(getInKey(roomId), userId);
       // const blackListId = ""
       if (hasJoin.length > 0) {
         await this.redis.hDel(getInKey(roomId), userId);
@@ -115,7 +115,7 @@ export class RoomAssistant {
       //   return;
       // }
       const reveseMic = Number(isAllowMic) === 0 ? 1 : 0;
-      console.log("设置MIC权当前用户:: %s 新MIC权", user, reveseMic);
+      console.log("设置MIC权当前用户:: %s 新MIC权", user.userId, reveseMic);
       const userObj = Object.assign({}, user, { isAllowMic: reveseMic });
       const roomObj = Object.assign({}, roomConfigRes, { allowMicId: user.userId });
 
@@ -201,9 +201,12 @@ export class RoomAssistant {
   async leaveRoom(roomId, userId, user) {
     try {
       await this.redis.hDel(getInKey(roomId), userId);
-      this.room.logger.info("离开房间", userId, AllRoomUsers);
+      await removeRoomUser(roomId, userId);
       const AllRoomUsers = await getAllRoomUsers(roomId);
       const roomConfig = await getRoomConfig(roomId);
+
+      this.room.logger.info("离开房间", userId, AllRoomUsers);
+
       this.socket.broadcast.to(roomId).emit(EVENT.roomOut, {
         user,
         roomsPerson: AllRoomUsers,
@@ -308,13 +311,14 @@ export class RoomAssistant {
   /**
    * 通知房间人员变动
    */
-  async notifyUsersChange(roomId, user) {
+  async notifyUsersChange(roomId, user, inter = true) {
     const AllRoomUsers = await getAllRoomUsers(roomId);
     // const roomConfig = await getRoomConfig(roomId);
     this.room.logger.info("notifyUsersChange", roomId, AllRoomUsers.length);
+    const actionName = inter ? "inRoom" : "outRoom";
     this.socket.broadcast.to(roomId).emit(EVENT.roomPersonChange, {
       user: user,
-      // actionName: "outRoom",
+      actionName: actionName,
       roomsPerson: AllRoomUsers,
     });
   }
@@ -334,13 +338,19 @@ export class RoomAssistant {
   }
   // 主动断开
   async disconnect() {
-    const syncId = this.room.syncId;
-    const roomId = this.room.roomId;
-    const userId = this.room.userId;
-    this.socket.leave(syncId);
-    this.socket.leave(roomId);
-    await this.redis.del(getInKey(syncId));
-    await this.redis.del(getInKey(userId));
+    try {
+      const syncId = this.room.syncId;
+      const roomId = this.room.roomId;
+      const userId = this.room.userId;
+      this.socket.leave(syncId);
+      this.socket.leave(roomId);
+      await removeRoomUser(roomId, userId);
+      await this.redis.del(getInKey(syncId));
+      await this.redis.del(getInKey(userId));
+      this.notifyUsersChange(roomId, this.room.user, false);
+    } catch (error) {
+      console.log("disconnect::error", error);
+    }
   }
   // RoomSessionId 房间有效时间
   setRoomUnlimit(roomSessionId) {