gemercheung 2 years ago
parent
commit
2595fbdcab

+ 24 - 23
src/room-manager/room-manager.controller.ts

@@ -134,29 +134,30 @@ export class RoomManagerController {
     if (id && userId) {
     if (id && userId) {
       const roomId = id;
       const roomId = id;
       this.roomService.handleKickAction(roomId, userId);
       this.roomService.handleKickAction(roomId, userId);
-      // const delUser = await this.usersService.getUsersBy(roomId, userId);
-      // this.roomService.logger.warn(
-      //   `RoomId: ${roomId},userId:${userId} socketId:${delUser.id}`,
-      //   'kick-user',
-      // );
-      // const roomUsers = await this.usersService.getRoomUsers(roomId);
-      // const filterRoomUser = roomUsers.filter((i) => i.UserId !== userId);
-      // if (delUser) {
-      //   this.roomService.socketGateway.server.sockets.sockets.forEach((soc) => {
-      //     if (soc.id === delUser.id) {
-      //       soc.data.isKick = true;
-      //       soc.disconnect(true);
-      //     }
-      //   });
-      //   const res = await this.usersService.deleteRoomUser(roomId, userId);
-      //   if (res) {
-      //     this.roomService.socketGateway.server.to(roomId).emit('action', {
-      //       type: 'user-exit',
-      //       user: delUser,
-      //       members: filterRoomUser,
-      //     });
-      //   }
-      // }
+    }
+  }
+
+  @Get('/setTempRoom/:time')
+  @ApiOperation({ summary: '设置全局临时房间总时长' })
+  @ApiParam({
+    name: 'time',
+    required: true,
+    description: '总时长TTL',
+    schema: { oneOf: [{ type: 'number' }] },
+    type: 'number',
+  })
+  @ApiResponse({
+    description: '返回值',
+    type: Boolean,
+  })
+  async setTempRoomTTL(@Param('time') time: number) {
+    this.roomService.logger.log(`time: ${time}`, 'api-setTempRoomTTL');
+    if (time >= 60) {
+      return this.usersService.setGlobalConfig({
+        tempRoomTime: time,
+      });
+    } else {
+      return false;
     }
     }
   }
   }
 }
 }

+ 7 - 0
src/room/config.d.ts

@@ -14,3 +14,10 @@ type IntRange<F extends number, T extends number> = Exclude<
   Enumerate<T>,
   Enumerate<T>,
   Enumerate<F>
   Enumerate<F>
 >;
 >;
+
+type JSONValue =
+  | string
+  | number
+  | boolean
+  | { [x: string]: JSONValue }
+  | Array<JSONValue>;

+ 4 - 9
src/room/room.service.ts

@@ -110,19 +110,14 @@ export class RoomService {
     await this.handleUserOnline(socket);
     await this.handleUserOnline(socket);
     await this.delayService.handleOnine(socket);
     await this.delayService.handleOnine(socket);
     let blockJoin = false;
     let blockJoin = false;
-    if (this._roomId?.length && this._userId?.length) {
+    const { RoomId, UserId } = socket.data.user;
+    if (RoomId?.length && UserId?.length) {
       //房主设置房间配置
       //房主设置房间配置
       if (this._isLeader) {
       if (this._isLeader) {
-        const isValid = await this.userService.isRoomMaster(
-          this._roomId,
-          this._userId,
-        );
+        const isValid = await this.userService.isRoomMaster(RoomId, UserId);
         //检查房主非法性
         //检查房主非法性
         if (isValid) {
         if (isValid) {
-          await this.userService.setRoomConfig(
-            this._roomId,
-            userInfo.roomConfig,
-          );
+          await this.userService.setRoomConfig(RoomId, userInfo.roomConfig);
         } else {
         } else {
           blockJoin = true;
           blockJoin = true;
           socket.emit('manager-error', {
           socket.emit('manager-error', {

+ 7 - 3
src/room/temp/temp.service.ts

@@ -5,6 +5,7 @@ import * as dayjs from 'dayjs';
 import * as duration from 'dayjs/plugin/duration';
 import * as duration from 'dayjs/plugin/duration';
 import { InjectRedis } from '@liaoliaots/nestjs-redis';
 import { InjectRedis } from '@liaoliaots/nestjs-redis';
 import { Redis } from 'ioredis';
 import { Redis } from 'ioredis';
+import { UsersService } from '../users/users.service';
 dayjs.extend(duration);
 dayjs.extend(duration);
 
 
 @Injectable()
 @Injectable()
@@ -12,6 +13,7 @@ export class TempService {
   constructor(
   constructor(
     @Inject(forwardRef(() => RoomService))
     @Inject(forwardRef(() => RoomService))
     private roomService: RoomService,
     private roomService: RoomService,
+    private usersService: UsersService,
     @InjectRedis() private readonly redis: Redis,
     @InjectRedis() private readonly redis: Redis,
   ) {}
   ) {}
   private isTempRoom = false;
   private isTempRoom = false;
@@ -29,10 +31,12 @@ export class TempService {
   async handleInitRoom(socket: Socket) {
   async handleInitRoom(socket: Socket) {
     const { RoomId, UserId, Role } = socket.data.user;
     const { RoomId, UserId, Role } = socket.data.user;
     const temp_key_init = `kankan:socket:tempRoom:${RoomId}`;
     const temp_key_init = `kankan:socket:tempRoom:${RoomId}`;
-    const delayTime = 60 * 60;
-    // const delayTime = 60 * 1;
+    const globalConfig = await this.usersService.getGlobalConfig();
+    const delayTime = globalConfig
+      ? Number(globalConfig['tempRoomTime'])
+      : 60 * 60;
+
     const isExist = await this.redis.exists(temp_key_init);
     const isExist = await this.redis.exists(temp_key_init);
-    console.log('isExist', isExist);
     if (!isExist) {
     if (!isExist) {
       if (Role === 'leader') {
       if (Role === 'leader') {
         await this.redis.set(temp_key_init, UserId, 'EX', delayTime);
         await this.redis.set(temp_key_init, UserId, 'EX', delayTime);

+ 25 - 0
src/room/users/users.service.ts

@@ -184,4 +184,29 @@ export class UsersService {
       );
       );
     }
     }
   }
   }
+
+  async setGlobalConfig(data: JSONValue): Promise<boolean> {
+    const globalKey = `kankan:socket:globalConfig`;
+    const isExist = await this.redis.get(globalKey);
+    let isSet = '';
+    if (isExist) {
+      const updater = JSON.parse(isExist);
+      const obj = Object.assign({}, updater, data);
+      isSet = await this.redis.set(globalKey, JSON.stringify(obj));
+    } else {
+      isSet = await this.redis.set(globalKey, JSON.stringify(data));
+    }
+
+    return Promise.resolve(Boolean(isSet === 'OK'));
+  }
+  async getGlobalConfig(): Promise<JSONValue> {
+    const globalKey = `kankan:socket:globalConfig`;
+    const isExist = await this.redis.get(globalKey);
+    if (isExist) {
+      const updater = JSON.parse(isExist);
+      return Promise.resolve(updater);
+    } else {
+      return Promise.resolve(false);
+    }
+  }
 }
 }