var fs = require("fs"); var stdin_buf = fs.readFileSync(0); ({username, security_token, marketids, servername} = JSON.parse(stdin_buf.toString().trim())); requirejs = require("requirejs"); requirejs.config({ nodeRequire: require}); requirejs("./lightstreamer.js"); requirejs(["LightstreamerClient","Subscription"], (LightstreamerClient, Subscription) => { var client = new LightstreamerClient(servername, 'InVisionProvider'); client.connectionDetails.setUser(username); client.connectionDetails.setPassword("XST-"+security_token); client.connect(); var sub = new Subscription( "MERGE", marketids.map((mid)=>"V2-F-BD1,AK1,BS1,AS1,BD2,AK2,BS2,AS2,BD3,AK3,BS3,AS3,BD4,AK4,BS4,AS4,BD5,AK5,BS5,AS5|"+mid), ['displayOffer', 'displayBid', 'bidSize', 'offerSize', 'displayOffer2', 'displayBid2', 'bidSize2', 'offerSize2', 'displayOffer3', 'displayBid3', 'bidSize3', 'offerSize3', 'displayOffer4', 'displayBid4', 'bidSize4', 'offerSize4', 'displayOffer5', 'displayBid5', 'bidSize5', 'offerSize5'] ) sub.setRequestedSnapshot('yes'); sub.setRequestedMaxFrequency(1); sub.addListener({ onItemUpdate: function(update) { let bids = [[], [], [], [], []]; let asks = [[], [], [], [], []]; update.forEachField(function (name, pos, value) { let b = !(name.toLowerCase().includes("bid")); let s = name.includes("Size"); let p = parseInt(name.slice(-1)) || 1; (b^s ? bids : asks)[p-1][s+0] = (s ? parseInt(value) : value); }); let ret = { id: update.getItemName().split("|")[1], bids: bids.filter((a)=>a[0]), asks: asks.filter((a)=>a[0]), }; console.log(JSON.stringify(ret)); } }); client.subscribe(sub); });