gemercheung 1 jaar geleden
bovenliggende
commit
f4a28390e8
1 gewijzigde bestanden met toevoegingen van 55 en 0 verwijderingen
  1. 55 0
      src/room/fd/fd.service.ts

+ 55 - 0
src/room/fd/fd.service.ts

@@ -0,0 +1,55 @@
+import { forwardRef, Inject, Injectable } from '@nestjs/common';
+import { Socket } from 'socket.io';
+import { RoomService } from '../room.service';
+import * as dayjs from 'dayjs';
+import * as duration from 'dayjs/plugin/duration';
+import { InjectRedis } from '@liaoliaots/nestjs-redis';
+import { Redis } from 'ioredis';
+import { UsersService } from '../users/users.service';
+dayjs.extend(duration);
+
+@Injectable()
+export class FDService {
+  constructor(
+    @Inject(forwardRef(() => RoomService))
+    private roomService: RoomService,
+    private usersService: UsersService,
+    @InjectRedis() private readonly redis: Redis,
+  ) {}
+  private isTempRoom = false;
+  get _isTempRoom(): boolean {
+    return this.isTempRoom;
+  }
+
+  init(socket: Socket) {
+    const { RoomId } = socket.data?.user;
+    if (RoomId && RoomId.indexOf('temp_') > -1) {
+      this.isTempRoom = true;
+      this.handleInitRoom(socket);
+    }
+  }
+  async handleInitRoom(socket: Socket) {
+    const { RoomId, UserId, Role } = socket.data.user;
+    const temp_key_init = `kankan:socket:tempRoom:${RoomId}`;
+    const globalConfig = await this.usersService.getGlobalConfig();
+    const delayTime = globalConfig
+      ? Number(globalConfig['tempRoomTime'])
+      : 60 * 60;
+
+    const isExist = await this.redis.exists(temp_key_init);
+    if (!isExist) {
+      if (Role === 'leader') {
+        await this.redis.set(temp_key_init, UserId, 'EX', delayTime);
+        this.roomService.socketGateway.server.to(RoomId).emit('action', {
+          type: 'room-valid-time',
+          data: { ttl: delayTime },
+        });
+      }
+    } else {
+      const ttl = await this.redis.ttl(temp_key_init);
+      this.roomService.socketGateway.server
+        .to(RoomId)
+        .emit('action', { type: 'room-valid-time', data: { ttl } });
+    }
+  }
+}