58 lines
1.8 KiB
TypeScript
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));
|
|
}
|
|
}
|