|
@@ -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 } });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|