import { WebSocketGateway, WebSocketServer, SubscribeMessage, OnGatewayConnection, } from '@nestjs/websockets'; import { Server, Socket } from 'socket.io'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { BidsService } from '../services/bids.service'; import { WebBidsService } from '../services/web-bids.service'; import { plainToClass } from 'class-transformer'; import { WebBid } from '../entities/wed-bid.entity'; import * as cookie from 'cookie'; import { Constant } from '@/modules/auth/ultils/constant'; import { getWayMiddleware } from '@/modules/auth/middlewares/get-way.middleware'; import { AdminsService } from '@/modules/admins/services/admins.service'; import { JwtService } from '@nestjs/jwt'; @WebSocketGateway({ namespace: 'admin-bid-ws', cors: { origin: '*', methods: ['GET', 'POST'], credentials: true, }, }) export class AdminBidGateway implements OnGatewayConnection { @WebSocketServer() server: Server; constructor( private eventEmitter: EventEmitter2, private readonly jwtService: JwtService, private webBidsService: WebBidsService, private readonly adminService: AdminsService, ) {} async onModuleInit() { this.eventEmitter.on('bids.updated', (data) => { this.server.emit('adminBidsUpdated', plainToClass(WebBid, data)); }); this.eventEmitter.on('working', (data) => { this.server.emit('working', data); }); } async handleConnection(client: Socket) { await getWayMiddleware(client, this.jwtService, this.adminService); console.log(`📢 Client connected: ${client.id}`); const data = await this.webBidsService.getDataClient(); // Gửi dữ liệu bids ngay khi client kết nối client.emit('adminBidsUpdated', plainToClass(WebBid, data)); } }