bid-tool/auto-bid-server/src/modules/bids/getways/admin-bid-getway.ts

58 lines
1.8 KiB
TypeScript

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