12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { InjectRedis } from '@liaoliaots/nestjs-redis';
- import { forwardRef, Inject, Injectable } from '@nestjs/common';
- import { Redis } from 'ioredis';
- import { Socket } from 'socket.io';
- import { RoomService } from '../room.service';
- import { UsersService } from '../users/users.service';
- @Injectable()
- export class ActionsService {
- constructor(
- @InjectRedis() private readonly redis: Redis,
- @Inject(forwardRef(() => RoomService))
- private roomService: RoomService,
- @Inject(forwardRef(() => UsersService))
- private userService: UsersService,
- ) {}
- async handleAllAction(socket: Socket, data: ActionsParams): Promise<void> {
- const isSocketLeader = () => {
- return socket.data.user?.Role === 'leader';
- };
- switch (data.type) {
- case 'danmumsg':
- const params = {} as DanmakuDataType;
- params.mode = data.data.mode;
- params.nickname = data.data.Nickname;
- params.text = data.data.text;
- params.userId = data.data.UserId;
- this.handleDanmaku(params);
- break;
- case 'users-muted':
- const mutedParams = data as any as MutedStateType;
- isSocketLeader() && (await this.handleMutedState(mutedParams));
- break;
- case 'users-words':
- const typingParams = data as any as TypingStateType;
- isSocketLeader() && (await this.handleTypingState(typingParams));
- break;
- case 'users-kicked':
- const kickParams = data as any as KickStateType;
- // console.log('kickParams', socket.data.user, kickParams);
- isSocketLeader() && (await this.handleKickState(socket, kickParams));
- break;
- default:
- break;
- }
- socket.broadcast.emit('action', data);
- }
- // answer(data: any) {
- // this.roomService.socketGateway._socket.broadcast.emit('action', data);
- // }
- async handleDanmaku(data: DanmakuDataType) {
- console.log('data', data);
- const roomId = this.roomService._userInfo.RoomId;
- const time = Date.now();
- if (roomId) {
- this.redis.hset(
- `kankan:socket:roomMsg:${roomId}`,
- time,
- JSON.stringify(data),
- );
- } else {
- this.roomService.logger.warn(
- 'handleDanmaku missing roomId ',
- 'ActionsService',
- );
- }
- }
- async handleMutedState(data: MutedStateType) {
- if (data) {
- const roomId = this.roomService._userInfo.RoomId;
- const userId = data.userId;
- const mutedState = data.muted;
- await this.userService.updateUserMicState(roomId, userId, mutedState);
- }
- }
- async handleTypingState(data: TypingStateType) {
- if (data) {
- const roomId = this.roomService._userInfo.RoomId;
- const userId = data.userId;
- const wordsState = data.words;
- await this.userService.updateUserTypingState(roomId, userId, wordsState);
- }
- }
- async handleKickState(socket: Socket, data: KickStateType) {
- if (data) {
- const roomId = socket.data.user.RoomId || '';
- const userId = data.userId;
- await this.roomService.handleKickAction(roomId, userId);
- }
- }
- }
|