symphony_market_data
Version:
The official JS client library for the Symphony Fintech MarketData API's
541 lines (448 loc) • 15.2 kB
JavaScript
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);
});
}
}