@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.
57 lines • 1.81 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProtocolManager = void 0;
const fields_1 = require("../fields");
const validator_1 = require("./validator");
class ProtocolManager {
constructor() {
this.validator = validator_1.FIX44Validator;
this.messageQueue = [];
this.isLoggedOn = false;
}
processIncoming(message) {
this.validator.validateRequiredFields(message);
this.validator.validateFieldOrder(message);
this.validator.validateFieldValues(message);
if (this.shouldQueueMessage(message)) {
this.messageQueue.push(message);
return;
}
this.handleMessage(message);
}
shouldQueueMessage(message) {
if (!this.isLoggedOn && message.getField(fields_1.Fields.MsgType) !== 'A') {
return true;
}
return false;
}
handleMessage(message) {
const msgType = message.getField(fields_1.Fields.MsgType);
switch (msgType) {
case fields_1.MsgType.Logon:
this.handleLogon(message);
break;
case fields_1.MsgType.Heartbeat:
this.handleHeartbeat(message);
break;
case fields_1.MsgType.Logout:
this.handleLogout(message);
break;
}
}
handleLogon(message) {
this.isLoggedOn = true;
while (this.messageQueue.length > 0) {
const queuedMsg = this.messageQueue.shift();
if (queuedMsg)
this.handleMessage(queuedMsg);
}
}
handleHeartbeat(message) {
}
handleLogout(message) {
this.isLoggedOn = false;
}
}
exports.ProtocolManager = ProtocolManager;
//# sourceMappingURL=manager.js.map