UNPKG

symphony_market_data

Version:

The official JS client library for the Symphony Fintech MarketData API's

541 lines (448 loc) 15.2 kB
var socketIoClient = require("socket.io-client"); var settings = require('./config/app/settings.json'); var events = require('events'); var logger = require('./logger'); var socketIoClient = require("socket.io-client"); var settings = require('./config/app/settings.json'); var events = require('events'); var logger = require('./logger'); var config = require('./config/app/config.json'); module.exports = class MDEmitter { /** * Constructs an XTSEmitter instance to enable data transfer via socket related events. * * @constructor * * @param {String} url * url parameter is used to connect to the particular server. * */ constructor(url) { this.url = url == "undefined" ? config.url : url; this.socketMD = { isConnected: false, socketMarketData: null, interval: null, } this.eventEmitter = new events.EventEmitter(); } /** * set the token value by providing the token in the input * * @param {string} token * token parameter will be generated after successful login and will be used in other private API's * */ set token(token) { this._token = token; } /** * Returns the token generated after successful logIn * * * @return * the value of token generated after successful logIn */ get token() { return this._token; } /** * set the userID value by providing the userID in the input * * @param {string} userID * userID for the particular user */ set userID(userID) { this._userID = userID; } /** * Returns userID for the particular user * * * @return * the userID for the particular user */ get userID() { return this._userID; } /** * set the publishFormat(JSON|Binary) required for the user * * @param {string} publishFormat * publishFormat (JSON|Binary) required for the user */ set publishFormat(publishFormat) { this._publishFormat = publishFormat; } /** * Returns publishFormat(JSON|Binary) required for the user * * * @return * the publishFormat(JSON|Binary) required for the user */ get publishFormat() { return this._publishFormat; } /** * set the broadcastMode (Full|partial) required for the user * * @param {string} broadcastMode * broadcastMode (Full|partial) required for the user */ set broadcastMode(broadcastMode) { this._broadcastMode = broadcastMode; } /** * Returns broadcastMode (Full|partial) required for the user * * * @return * the broadcastMode (Full|partial) required for the user */ get broadcastMode() { return this._broadcastMode; } /** * set the url value by providing the url in the input * * @param {string} url * url parameter is used to connect to the particular server. */ set url(url) { this._url = url; } /** * Returns url used to connect to the particular server. * * * @return * the url used to connect to the particular server. */ get url() { return this._url; } /** * Initalizes the socket by accepting userID and token as input parameters * * @param {Object} reqObject request object. * * @param {string} reqObject.userID * userID for the particular user. * * @param {string} reqObject.token * token parameter will be generated after successful login and will be used in other private API's * * @param {string} reqObject.publishFormat * publishFormat(JSON|Binary) required for the user * * @param {string} reqObject.broadcastMode * broadcastMode (Full|partial) required for the user * */ init(reqObject) { this.userID = reqObject.userID; this.token = reqObject.token; this.publishFormat = reqObject.publishFormat; this.broadcastMode = reqObject.broadcastMode; if (this.socketMD.socketMarketData) { this.socketMD.socketMarketData.destroy(); delete this.socketMD.socketMarketData; this.socketMD.socketMarketData = null; } // path: "/interactive/socket.io", this.socketMD.socketMarketData = socketIoClient(this.url, { reconnection: false, query: { token: this.token, userID: this.userID } }); logger.logFile("socket is initialized with the following parameters url " + this.url + " token " + this.token + " userID " + this.userID); /** * Listener of the connect event via socket and emit the connect event via event Emitter * * * @event connect */ this.socketMD.socketMarketData.on(settings.socket.connect, (data) => { this.socketMD.isConnected = true; console.info("socket connected successfully"); this.eventEmitter.emit(settings.socket.connect, data); }); /** * Listener of the joined event via socket and emit the joined event via event Emitter * * * @event joined */ this.socketMD.socketMarketData.on(settings.socket.joined, (data) => { console.info("socket joined successfully"); this.eventEmitter.emit(settings.socket.joined, data); }); /** * Listener of the error event via socket and emit the error event via event Emitter * * * @event error */ this.socketMD.socketMarketData.on(settings.socket.error, (data) => { console.info("socket error occurred"); this.eventEmitter.emit(settings.socket.error, data); }); /** * Listener of the disconnect event via socket and emit the disconnect event via event Emitter * * * @event disconnect */ this.socketMD.socketMarketData.on(settings.socket.disconnect, (data) => { console.info("socket got disconnected"); this.socketMD.isConnected = false; this.socketMD.interval = setInterval(() => { if (this.socketMD.isConnected) { clearInterval(this.socketMD.interval); this.socketMD.interval = null; return; } let reqObject = { userID: this.userID, token: this.token, publishFormat: this.publishFormat, broadcastMode: this.broadcastMode } this.init(reqObject); }, 5000); this.eventEmitter.emit(settings.socket.disconnect, data); }); /** * Listener of the 1502-binary-full event via socket and emit the marketDepthEvent via event Emitter * * * @event 1502-binary-full */ this.socketMD.socketMarketData.on("1502-binary-full", (data) => { this.eventEmitter.emit(settings.socket.marketDepthEvent, data); }); /** * Listener of the 1502-json-full event via socket and emit the marketDepthEvent via event Emitter * * * @event 1502-json-full */ this.socketMD.socketMarketData.on("1502-json-full", (data) => { this.eventEmitter.emit(settings.socket.marketDepthEvent, data); }); /** * Listener of the 1502-json-partial event via socket and emit the marketDepthEvent via event Emitter * * * @event 1502-json-partial */ this.socketMD.socketMarketData.on("1502-json-partial", (data) => { this.eventEmitter.emit(settings.socket.marketDepthEvent, data); }); /** * Listener of the 1504-binary-full event via socket and emit the indexDataEvent via event Emitter * * * @event 1504-binary-full */ this.socketMD.socketMarketData.on("1504-binary-full", (data) => { this.eventEmitter.emit(settings.socket.indexDataEvent, data); }); /** * Listener of the 1504-json-full event via socket and emit the indexDataEvent via event Emitter * * * @event 1504-json-full */ this.socketMD.socketMarketData.on("1504-json-full", (data) => { this.eventEmitter.emit(settings.socket.indexDataEvent, data); }); /** * Listener of the 1504-json-partial event via socket and emit the indexDataEvent via event Emitter * * * @event 1504-json-partial */ this.socketMD.socketMarketData.on("1504-json-partial", (data) => { this.eventEmitter.emit(settings.socket.indexDataEvent, data); }); /** * Listener of the 1510-binary-full event via socket and emit the openInterestEvent via event Emitter * * * @event 1510-binary-full */ this.socketMD.socketMarketData.on("1510-binary-full", (data) => { this.eventEmitter.emit(settings.socket.openInterestEvent, data); }); /** * Listener of the 1510-json-full event via socket and emit the openInterestEvent via event Emitter * * * @event 1510-json-full */ this.socketMD.socketMarketData.on("1510-json-full", (data) => { this.eventEmitter.emit(settings.socket.openInterestEvent, data); }); /** * Listener of the 1510-json-partial event via socket and emit the openInterestEvent via event Emitter * * * @event 1510-json-partial */ this.socketMD.socketMarketData.on("1510-json-partial", (data) => { this.eventEmitter.emit(settings.socket.openInterestEvent, data); }); /** * Listener of the 5018-binary-full event via socket and emit the marketDepth100Event via event Emitter * * * @event 5018-binary-full */ this.socketMD.socketMarketData.on("5018-binary-full", (data) => { this.eventEmitter.emit(settings.socket.marketDepth100Event, data); }); /** * Listener of the 5018-json-full event via socket and emit the marketDepth100Event via event Emitter * * * @event 5018-json-full */ this.socketMD.socketMarketData.on("5018-json-full", (data) => { this.eventEmitter.emit(settings.socket.marketDepth100Event, data); }); /** * Listener of the 5018-json-partial event via socket and emit the marketDepth100Event via event Emitter * * * @event 5018-json-partial */ this.socketMD.socketMarketData.on("5018-json-partial", (data) => { this.eventEmitter.emit(settings.socket.marketDepth100Event, data); }); /** * Listener of the 1505-binary-full event via socket and emit the candleDataEvent via event Emitter * * * @event 1505-binary-full */ this.socketMD.socketMarketData.on("1505-binary-full", (data) => { this.eventEmitter.emit(settings.socket.candleDataEvent, data); }); /** * Listener of the 1505-json-full event via socket and emit the candleDataEvent via event Emitter * * * @event 1505-json-full */ this.socketMD.socketMarketData.on("1505-json-full", (data) => { this.eventEmitter.emit(settings.socket.candleDataEvent, data); }); /** * Listener of the 1505-json-partial event via socket and emit the candleDataEvent via event Emitter * * * @event 1505-json-partial */ this.socketMD.socketMarketData.on("1505-json-partial", (data) => { this.eventEmitter.emit(settings.socket.candleDataEvent, data); }); /** * Listener of the logout event via socket and emit the logout event via event Emitter * * * @event logout */ this.socketMD.socketMarketData.on(settings.socket.logout, (data) => { console.info("socket logout successfully"); this.eventEmitter.emit(settings.socket.logout, data); }); } /** * connect listener for event emitter * */ onConnect(fn) { this.eventEmitter.on(settings.socket.connect, (data) => { fn(data) }); } /** * joined listener for event emitter * */ onJoined(fn) { this.eventEmitter.on(settings.socket.joined, (data) => { fn(data) }); } /** * error listener for event emitter * */ onError(fn) { this.eventEmitter.on(settings.socket.error, (data) => { fn(data) }); } /** * disconnect listener for event emitter * */ onDisconnect(fn) { this.eventEmitter.on(settings.socket.disconnect, (data) => { fn(data) }); } /** * MarketDepthEvent listener for event emitter * */ onMarketDepthEvent(fn) { this.eventEmitter.on(settings.socket.marketDepthEvent, (data) => { fn(data); }); } /** * OpenInterestEvent listener for event emitter * */ onOpenInterestEvent(fn) { this.eventEmitter.on(settings.socket.openInterestEvent, (data) => { fn(data); }); } /** * indexDataEvent listener for event emitter * */ onIndexDataEvent(fn) { this.eventEmitter.on(settings.socket.indexDataEvent, (data) => { fn(data); }); } /** * marketDepth100Event listener for event emitter * */ onMarketDepth100Event(fn) { this.eventEmitter.on(settings.socket.marketDepth100Event, (data) => { fn(data); }); } /** * candleDataEvent listener for event emitter * */ onCandleDataEvent(fn) { this.eventEmitter.on(settings.socket.candleDataEvent, (data) => { fn(data); }); } /** * logout listener for event emitter * */ onLogout(fn) { this.eventEmitter.on(settings.socket.logout, (data) => { fn(data); }); } }