import util from 'util'; const debuglog = util.debuglog('ib-tws-api'); import IncomeMessageType from './const-income-message-type.js'; import IncomeFieldsetHandlerByType from './income-fieldset-handlers/index.js'; import IncomeFieldsetHandlerBus from './income-fieldset-handler-bus.js'; class IncomeFieldsetHandler { constructor(p = {}) { this._bus = new IncomeFieldsetHandlerBus(p.timeoutMs, p.eventEmitter); } setServerVersion(v) { this._bus.serverVersion = v; } processMessageFieldsetBeforeServerVersion(fields) { debuglog('processMessageFieldsetBeforeServerVersion'); if (fields.length == 2) { // first message sent after handshake this._processByType(IncomeMessageType._SERVER_VERSION, fields); } } processMessageFieldset(fields) { this._processByType(parseInt(fields[0]), fields); } _processByType(messageTypeId, fields) { debuglog('processByType. processing message ' + messageTypeId); if (!IncomeFieldsetHandlerByType[messageTypeId]) { debuglog('unknown message type ID ' + messageTypeId); return; } IncomeFieldsetHandlerByType[messageTypeId].call(this._bus, fields); } awaitMessageType(messageTypeId) { return new Promise((resolve, reject) => { this._bus.messageTypeAddAwaitPromise(messageTypeId, resolve, reject); }); } awaitRequestId(requestId) { return new Promise((resolve, reject) => { this._bus.requestIdAddAwaitPromise(requestId, resolve, reject); }); } awaitRequestIdErrorCode(requestId, errorCode) { return new Promise((resolve, reject) => { this._bus.requestIdAddAwaitPromiseErrorCode(requestId, errorCode, resolve, reject); }); } requestIdEmitter(requestId, stopFunctor) { let eventEmitter = this._bus.requestIdEmitter(requestId, stopFunctor); eventEmitter.stop = () => { this._bus.requestIdDelete(requestId); stopFunctor(); }; return eventEmitter; } } export default IncomeFieldsetHandler;