gemercheung 3 years ago
parent
commit
a0b7a4ec79

+ 12 - 0
src/connection/redis.js

@@ -7,6 +7,18 @@ if (cluster.isPrimary) {
   logger.info("redis", { url });
 }
 const pubClient = createClient({ url: url });
+
+pubClient.on("ready", () => {
+  // console.log("pubClient-ready");
+  pubClient.configSet("notify-keyspace-events", "Ex");
+});
+// pubClient.configSet
 const subClient = pubClient.duplicate();
+// subClient.on('ready',()=>{
+//   subClient.subscribe("__keyevent@0__:expired", (key) => {
+//     console.log("key=> ", key);
+//   });
+// })
+
 
 export { pubClient, subClient };

+ 8 - 6
src/controller/connectController.js

@@ -16,13 +16,15 @@ export class ConnectController extends BasicController {
     this.socket.on("disconnect", (reason) => {
       const res = String(reason).split(" ");
       console.log("disconnect-reason", res);
-      this.roomController.logger.info("断开连接", { userId: this.userId, from });
-      if (res.includes("close") || res.includes("disconnect")) {
-        if ([FROMTYPE.MiniAPP].includes(Number(this.roomController.user.from))) {
-          this.roomController.logger.info("断开连接");
-          // this.roomController.roomAssistant.disconnect();
-        }
+
+      // 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, 1 * 60);
+        // this.roomController.roomAssistant.disconnect();
+        this.roomController.roomAssistant.unWatchRoomExpired();
       }
+      // }
     });
   }
 }

+ 20 - 1
src/controller/room/assistant.js

@@ -2,7 +2,7 @@
 import { EVENT, CODEMEG } from "../../enum/index.js";
 import { updateUser, removeRoomAllUsers, getAllRoomUsers, updateRoomUser } from "../../service/userService.js";
 import { setRoomConfig, getRoomConfig } from "../../service/roomConfigService.js";
-
+import { subClient } from "../../connection/redis.js";
 export class RoomAssistant {
   constructor(socket, redis, room) {
     this.socket = socket;
@@ -214,4 +214,23 @@ export class RoomAssistant {
     await this.redis.del(syncId);
     await this.redis.del(userId);
   }
+  // RoomSessionId 房间有效时间
+  setRoomUnlimit(roomSessionId) {
+    return this.redis.expire(roomSessionId, -1);
+  }
+  setRoomAvailableBySeconds(roomSessionId, seconds) {
+    return this.redis.expire(roomSessionId, seconds);
+  }
+  setRoomAvailableByHours(roomSessionId, hours) {
+    return this.redis.expire(roomSessionId, 60 * 60 * hours);
+  }
+  watchRoomExpired(callback) {
+    subClient.subscribe("__keyevent@0__:expired", this.watchRoomExpiredFn);
+  }
+  watchRoomExpiredFn(key) {
+    console.log("key=> ", key);
+  }
+  unWatchRoomExpired() {
+    subClient.unsubscribe("__keyevent@0__:expired", this.watchRoomExpiredFn);
+  }
 }

+ 4 - 4
src/controller/room/index.js

@@ -36,6 +36,7 @@ export class RoomController extends BasicController {
       await this.init();
       this.initBaseAction();
       this.roomMasterAutoRejoin();
+      this.roomAssistant.watchRoomExpired();
     } catch (error) {
       this.logger.error("roomController::run::error", error);
     }
@@ -81,7 +82,7 @@ export class RoomController extends BasicController {
     this.roomId = `room-${uRoomId}_${oneSceneNum}_web`;
     this.user.roomId = uRoomId;
     this.roomConfigId = `config-${this.roomId}`;
-    return Promise.resolve(true)
+    return Promise.resolve(true);
   }
 
   initBaseAction() {
@@ -167,17 +168,16 @@ export class RoomController extends BasicController {
       const sessionExist = await this.redisCli.exists(this.sessionId);
       const roomConfig = await getRoomConfig(this.roomId);
       if (sessionExist > 0 && roomConfig.isStart && roomConfig.isStart === "true") {
-
         const AllRoomUsers = await getAllRoomUsers(this.roomId);
         // 房主
         if (this.isHoster(this.user.role)) {
           console.log("自动接连", this.roomId);
           this.socket.join(this.roomId);
-  
+
           this.socket.emit("autoReJoin", {
             user: this.user,
             roomsPerson: AllRoomUsers,
-            roomId:this.user.roomId
+            roomId: this.user.roomId,
           });
         }
         setTimeout(() => {