UNPKG

@sotatech/nest-quickfix

Version:

A powerful NestJS implementation of the FIX (Financial Information eXchange) protocol. Provides high-performance, reliable messaging for financial trading applications with built-in session management, message validation, and recovery mechanisms.

78 lines 3.06 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var RoomManager_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.RoomManager = void 0; const common_1 = require("@nestjs/common"); let RoomManager = RoomManager_1 = class RoomManager { constructor() { this.logger = new common_1.Logger(RoomManager_1.name); this.rooms = new Map(); this.sessionRooms = new Map(); } join(roomId, sessionId) { this.initializeRoomIfNeeded(roomId); this.initializeSessionRoomsIfNeeded(sessionId); this.rooms.get(roomId).add(sessionId); this.sessionRooms.get(sessionId).add(roomId); } leave(roomId, sessionId) { this.logger.debug(`Removing session ${sessionId} from room ${roomId}`); this.removeFromRoom(roomId, sessionId); this.removeRoomFromSession(roomId, sessionId); } leaveAllRooms(sessionId) { this.logger.debug(`Removing session ${sessionId} from all rooms`); const rooms = this.sessionRooms.get(sessionId); if (rooms) { rooms.forEach((roomId) => this.leave(roomId, sessionId)); } } getSessionsInRoom(roomId) { return Array.from(this.rooms.get(roomId) || new Set()); } getSessionRooms(sessionId) { return Array.from(this.sessionRooms.get(sessionId) || new Set()); } isInRoom(roomId, sessionId) { return this.rooms.get(roomId)?.has(sessionId) || false; } initializeRoomIfNeeded(roomId) { if (!this.rooms.has(roomId)) { this.rooms.set(roomId, new Set()); } } initializeSessionRoomsIfNeeded(sessionId) { if (!this.sessionRooms.has(sessionId)) { this.sessionRooms.set(sessionId, new Set()); } } removeFromRoom(roomId, sessionId) { const room = this.rooms.get(roomId); if (room) { room.delete(sessionId); if (room.size === 0) { this.rooms.delete(roomId); } } } removeRoomFromSession(roomId, sessionId) { const sessionRooms = this.sessionRooms.get(sessionId); if (sessionRooms) { sessionRooms.delete(roomId); if (sessionRooms.size === 0) { this.sessionRooms.delete(sessionId); } } } }; exports.RoomManager = RoomManager; exports.RoomManager = RoomManager = RoomManager_1 = __decorate([ (0, common_1.Injectable)() ], RoomManager); //# sourceMappingURL=room.manager.js.map