You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.8 KiB

3 weeks ago
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);
});