UNPKG

jspurefix

Version:
188 lines 8.33 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SessionContainer = void 0; const tsyringe_1 = require("tsyringe"); const util_1 = require("../util"); const config_1 = require("../config"); const di_tokens_1 = require("./di-tokens"); const make_config_1 = require("./make-config"); const tcp_1 = require("../transport/tcp"); const http_1 = require("../transport/http"); const ascii_msg_transmitter_1 = require("../transport/ascii/ascii-msg-transmitter"); const fixml_msg_transmitter_1 = require("../transport/fixml/fixml-msg-transmitter"); const fixml_1 = require("../transport/fixml"); const ascii_1 = require("../transport/ascii"); const buffer_1 = require("../buffer"); const ascii_2 = require("../buffer/ascii"); const fixml_2 = require("../buffer/fixml"); class SessionContainer { reset() { tsyringe_1.container.reset(); } registerGlobal(levelOrLoggerFactory = 'info') { tsyringe_1.container.registerInstance(util_1.DefinitionFactory, new util_1.DefinitionFactory()); let lf; if (typeof levelOrLoggerFactory === 'string') { lf = new config_1.JsFixWinstonLogFactory(config_1.WinstonLogger.consoleOptions(levelOrLoggerFactory)); } else { lf = levelOrLoggerFactory; } tsyringe_1.container.registerInstance(di_tokens_1.DITokens.JsFixLoggerFactory, lf); tsyringe_1.container.register(make_config_1.RuntimeFactory, { useClass: make_config_1.RuntimeFactory }); tsyringe_1.container.register(di_tokens_1.DITokens.ElasticBuffer, { useClass: buffer_1.ElasticBuffer }); } makeSessionFactory(description) { const fixml = !this.isAscii(description); return fixml ? new fixml_1.FixmlSessionMsgFactory(description) : new ascii_1.AsciiSessionMsgFactory(description); } newChild(description) { const sessionContainer = tsyringe_1.container.createChildContainer(); const sf = this.makeSessionFactory(description); sessionContainer.registerInstance(di_tokens_1.DITokens.ISessionDescription, description); sessionContainer.registerInstance(di_tokens_1.DITokens.ISessionMsgFactory, sf); return sessionContainer; } makeSystem(description) { return __awaiter(this, void 0, void 0, function* () { return yield new Promise((resolve, reject) => { const sessionContainer = this.newChild(description); const factory = sessionContainer.resolve(make_config_1.RuntimeFactory); factory.makeConfig().then((c) => { this.registerSession(c, sessionContainer); resolve(sessionContainer); }).catch(e => { reject(e); }); }); }); } isAscii(description) { var _a; return ((_a = description.application) === null || _a === void 0 ? void 0 : _a.protocol) === 'ascii'; } isInitiator(description) { var _a; return ((_a = description.application) === null || _a === void 0 ? void 0 : _a.type) === 'initiator'; } asAscii(description, sessionContainer) { var _a; sessionContainer.register(di_tokens_1.DITokens.MsgTransmitter, { useClass: ascii_msg_transmitter_1.AsciiMsgTransmitter }); sessionContainer.register(di_tokens_1.DITokens.MsgParser, { useClass: ascii_2.AsciiParser }); const parseSize = 160 * 1024; const sendSize = 10 * 1024; sessionContainer.register(di_tokens_1.DITokens.maxMessageLen, { useValue: parseSize }); sessionContainer.register(ascii_2.AsciiSegmentParser, { useClass: ascii_2.AsciiSegmentParser }); sessionContainer.register(ascii_2.AsciiParserState, { useClass: ascii_2.AsciiParserState }); sessionContainer.registerInstance(di_tokens_1.DITokens.TransmitBuffer, new buffer_1.ElasticBuffer(sendSize)); sessionContainer.registerInstance(di_tokens_1.DITokens.ParseBuffer, new buffer_1.ElasticBuffer(parseSize)); if (this.isInitiator(description)) { sessionContainer.register(tcp_1.TcpInitiator, { useClass: tcp_1.TcpInitiator }); sessionContainer.register(tcp_1.RecoveringTcpInitiator, { useClass: tcp_1.RecoveringTcpInitiator }); sessionContainer.register(tcp_1.TcpInitiatorConnector, { useClass: tcp_1.TcpInitiatorConnector }); if ((_a = description.application) === null || _a === void 0 ? void 0 : _a.resilient) { sessionContainer.register(di_tokens_1.DITokens.FixEntity, { useClass: tcp_1.RecoveringTcpInitiator }); } else { sessionContainer.register(di_tokens_1.DITokens.FixEntity, { useClass: tcp_1.TcpInitiatorConnector }); } } else { sessionContainer.register(di_tokens_1.DITokens.FixEntity, { useClass: tcp_1.TcpAcceptorListener }); } } asFixml(description, sessionContainer) { sessionContainer.register(di_tokens_1.DITokens.MsgTransmitter, { useClass: fixml_msg_transmitter_1.FixmlMsgTransmitter }); const sendSize = 10 * 1024; sessionContainer.register(di_tokens_1.DITokens.MsgParser, { useClass: fixml_2.FiXmlParser }); sessionContainer.register(di_tokens_1.DITokens.maxMessageLocations, { useValue: sendSize }); sessionContainer.register(di_tokens_1.DITokens.MsgEncoder, { useClass: fixml_2.FixmlEncoder }); sessionContainer.registerInstance(di_tokens_1.DITokens.TransmitBuffer, new buffer_1.ElasticBuffer(sendSize)); sessionContainer.register(http_1.HttpAcceptorListener, { useClass: http_1.HttpAcceptorListener }); sessionContainer.register(http_1.HttpInitiator, { useClass: http_1.HttpInitiator }); if (this.isInitiator(description)) { sessionContainer.register(di_tokens_1.DITokens.FixEntity, { useClass: http_1.HttpInitiator }); sessionContainer.register(di_tokens_1.DITokens.IHttpAdapter, { useClass: http_1.HttpJsonSampleAdapter }); } else { sessionContainer.register(di_tokens_1.DITokens.FixEntity, { useClass: http_1.HttpAcceptorListener }); } } asciiConstants(c, sessionContainer) { sessionContainer.register(di_tokens_1.DITokens.delimiter, { useValue: c.delimiter }); sessionContainer.register(di_tokens_1.DITokens.logDelimiter, { useValue: c.logDelimiter }); } registerSession(c, sessionContainer) { if (this.isAscii(c.description)) { this.asAscii(c.description, sessionContainer); this.asciiConstants(c, sessionContainer); } else { this.asFixml(c.description, sessionContainer); } c.sessionContainer = sessionContainer; sessionContainer.registerInstance(di_tokens_1.DITokens.IJsFixConfig, c); sessionContainer.registerInstance(di_tokens_1.DITokens.Definitions, c.definitions); } } exports.SessionContainer = SessionContainer; //# sourceMappingURL=session-container.js.map