173 lines
5.2 KiB
JavaScript
173 lines
5.2 KiB
JavaScript
// import { parseFullSymbol } from './helpers.js';
|
|
// import { subPrices } from '@/blockchain/prices.js';
|
|
|
|
// const socket = io('wss://streamer.cryptocompare.com');
|
|
// const channelToSubscription = new Map();
|
|
|
|
// socket.on('connect', () => {
|
|
// console.log('[socket] Connected');
|
|
// });
|
|
|
|
// socket.on('disconnect', (reason) => {
|
|
// console.log('[socket] Disconnected:', reason);
|
|
// });
|
|
|
|
// socket.on('error', (error) => {
|
|
// console.log('[socket] Error:', error);
|
|
// });
|
|
|
|
// socket.on('m', data => {
|
|
// console.log('[socket] Message:', data);
|
|
// const [
|
|
// eventTypeStr,
|
|
// exchange,
|
|
// fromSymbol,
|
|
// toSymbol,
|
|
// ,
|
|
// ,
|
|
// tradeTimeStr,
|
|
// ,
|
|
// tradePriceStr,
|
|
// ] = data.split('~');
|
|
|
|
// if (parseInt(eventTypeStr) !== 0) {
|
|
// // Skip all non-trading events
|
|
// return;
|
|
// }
|
|
// const tradePrice = parseFloat(tradePriceStr);
|
|
// const tradeTime = parseInt(tradeTimeStr);
|
|
// const channelString = `0~${exchange}~${fromSymbol}~${toSymbol}`;
|
|
// const subscriptionItem = channelToSubscription.get(channelString);
|
|
// if (subscriptionItem === undefined) {
|
|
// return;
|
|
// }
|
|
// const lastDailyBar = subscriptionItem.lastDailyBar;
|
|
// const nextDailyBarTime = getNextDailyBarTime(lastDailyBar.time, subscriptionItem.resolution);
|
|
|
|
// console.log("tradeTime ", tradeTime, new Date(tradeTime))
|
|
// console.log("lastDailyBar.time", lastDailyBar.time, new Date(lastDailyBar.time))
|
|
// console.log("nextDailyBarTime ", nextDailyBarTime, new Date(nextDailyBarTime))
|
|
|
|
// let bar;
|
|
// if (tradeTime >= nextDailyBarTime) {
|
|
// bar = {
|
|
// time: nextDailyBarTime,
|
|
// open: tradePrice,
|
|
// high: tradePrice,
|
|
// low: tradePrice,
|
|
// close: tradePrice,
|
|
// };
|
|
// console.log('[socket] Generate new bar', bar);
|
|
// console.log("time:", bar.time.toString(), new Date(bar.time).toUTCString())
|
|
// } else {
|
|
// bar = {
|
|
// ...lastDailyBar,
|
|
// high: Math.max(lastDailyBar.high, tradePrice),
|
|
// low: Math.min(lastDailyBar.low, tradePrice),
|
|
// close: tradePrice,
|
|
// };
|
|
// console.log('[socket] Update the latest bar by price', tradePrice);
|
|
// }
|
|
// subscriptionItem.lastDailyBar = bar;
|
|
|
|
// // Send data to every subscriber of that symbol
|
|
// subscriptionItem.handlers.forEach(handler => handler.callback(bar));
|
|
// });
|
|
|
|
// function getNextDailyBarTime(barTime, res) {
|
|
// const date = new Date(barTime);
|
|
// const resDigits = res.slice(0, -1)
|
|
// if (res.endsWith("W")) {
|
|
// date.setDate(date.getDate() + parseInt(resDigits)*7);
|
|
// } else if (res.endsWith("D")) {
|
|
// date.setDate(date.getDate() + parseInt(resDigits));
|
|
// } else {
|
|
// date.setMinutes(date.getMinutes() + parseInt(res))
|
|
// }
|
|
// return date.getTime();
|
|
// }
|
|
|
|
// export function subscribeOnStream(
|
|
// symbolInfo,
|
|
// resolution,
|
|
// onRealtimeCallback,
|
|
// subscriberUID,
|
|
// onResetCacheNeededCallback,
|
|
// lastDailyBar,
|
|
// ) {
|
|
// // return;
|
|
// const parsedSymbol = parseFullSymbol(symbolInfo.full_name);
|
|
// const channelString = `0~${parsedSymbol.exchange}~${parsedSymbol.fromSymbol}~${parsedSymbol.toSymbol}`;
|
|
// const handler = {
|
|
// id: subscriberUID,
|
|
// callback: onRealtimeCallback,
|
|
// };
|
|
// let subscriptionItem = channelToSubscription.get(channelString);
|
|
// if (subscriptionItem) {
|
|
// // Already subscribed to the channel, use the existing subscription
|
|
// subscriptionItem.handlers.push(handler);
|
|
// return;
|
|
// }
|
|
// subscriptionItem = {
|
|
// subscriberUID,
|
|
// resolution,
|
|
// lastDailyBar,
|
|
// handlers: [handler],
|
|
// };
|
|
// channelToSubscription.set(channelString, subscriptionItem);
|
|
// console.log('[subscribeBars]: Subscribe to streaming. Channel:', channelString);
|
|
// socket.emit('SubAdd', { subs: [channelString] });
|
|
// }
|
|
|
|
// export function unsubscribeFromStream(subscriberUID) {
|
|
// // return;
|
|
// // Find a subscription with id === subscriberUID
|
|
// for (const channelString of channelToSubscription.keys()) {
|
|
// const subscriptionItem = channelToSubscription.get(channelString);
|
|
// const handlerIndex = subscriptionItem.handlers
|
|
// .findIndex(handler => handler.id === subscriberUID);
|
|
|
|
// if (handlerIndex !== -1) {
|
|
// // Remove from handlers
|
|
// subscriptionItem.handlers.splice(handlerIndex, 1);
|
|
|
|
// if (subscriptionItem.handlers.length === 0) {
|
|
// // Unsubscribe from the channel if it was the last handler
|
|
// console.log('[unsubscribeBars]: Unsubscribe from streaming. Channel:', channelString);
|
|
// socket.emit('SubRemove', { subs: [channelString] });
|
|
// channelToSubscription.delete(channelString);
|
|
// break;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// function sim() {
|
|
// // Assuming these variables hold the data you extracted earlier
|
|
// const eventTypeStr = "0";
|
|
// const exchange = "Uniswap";
|
|
// const fromSymbol = "WETH";
|
|
// const toSymbol = "USD";
|
|
// const tradeTimeStr = (Date.now()).toString();
|
|
// const tradePriceStr = (55+Date.now()%23).toString();
|
|
|
|
// // Constructing the original string
|
|
// const data = [
|
|
// eventTypeStr,
|
|
// exchange,
|
|
// fromSymbol,
|
|
// toSymbol,
|
|
// '', // Placeholder for the fifth element
|
|
// '', // Placeholder for the sixth element
|
|
// tradeTimeStr,
|
|
// '', // Placeholder for the eighth element
|
|
// tradePriceStr,
|
|
// ].join('~');
|
|
// socket._callbacks['$m'][0](data);
|
|
// }
|
|
|
|
// window.sim = sim;
|
|
// socket._callbacks['$connect'][0]();
|
|
// setInterval(sim, 10*1000);
|
|
;
|