Files
web/src/charts/streaming.js
2024-03-17 18:24:19 -07:00

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);
;