diff --git a/src/blockchain/ohlcs.js b/src/blockchain/ohlcs.js index a46b735..462349b 100644 --- a/src/blockchain/ohlcs.js +++ b/src/blockchain/ohlcs.js @@ -7,8 +7,10 @@ export const WIDE_PRICE_FORMAT = {decimals:38, width:512, signed:false}; // 38 d export function subOHLC( chainId, pool, period ) { const key = `${pool}|${period}` const ckey = `${chainId}|${key}` - if (!(key in ohlcSubCounts) || ohlcSubCounts[ckey] === 0) { + // console.log('subOHLC', chainId, pool, period, ckey, ohlcSubCounts[ckey]) + if (!(ckey in ohlcSubCounts) || ohlcSubCounts[ckey] === 0) { ohlcSubCounts[ckey] = 1 + console.log('subscribing OHLCs', chainId, key) socket.emit('subOHLCs', chainId, [key]) } else ohlcSubCounts[ckey]++ @@ -18,14 +20,17 @@ export function subOHLC( chainId, pool, period ) { export function unsubOHLC( chainId, pool, period ) { const key = `${pool}|${period}` const ckey = `${chainId}|${key}` + // console.log('unsubOHLC', chainId, pool, period, ckey, ohlcSubCounts[ckey]) if (!(ckey in ohlcSubCounts) || ohlcSubCounts[ckey] === 0) { console.error('overdecremented ohlc', pool, period) ohlcSubCounts[ckey] = 1 } else { ohlcSubCounts[ckey]-- - if (ohlcSubCounts[key] === 0) + if (ohlcSubCounts[ckey] === 0) { + console.log('unsubscribing OHLCs', chainId, key) // noinspection JSCheckFunctionSignatures socket.emit('unsubOHLCs', chainId, [key]) + } } } diff --git a/src/charts/datafeed.js b/src/charts/datafeed.js index 2111e1a..f0daab8 100644 --- a/src/charts/datafeed.js +++ b/src/charts/datafeed.js @@ -338,30 +338,38 @@ export const DataFeed = { subscriberUID, onResetCacheNeededCallback, ) => { - console.log('[subscribeBars]: Method call with subscriberUID:', subscriberUID); + console.log('[subscribeBars]', symbolInfo, resolution, subscriberUID); const chainId = useStore().chainId.value; const poolAddr = useChartOrderStore().selectedPool[0]; const period = tvResolutionToPeriodString(resolution); subscriptions[subscriberUID] = [chainId, poolAddr, period] - DataFeed.subscribeBarsOnRealtimeCallback = onRealtimeCallback; + const key = `${chainId}|${poolAddr}|${period}`; + subscription_callbacks[key] = [onRealtimeCallback, onResetCacheNeededCallback] + console.log('sub', key) subOHLC(chainId, poolAddr, period) }, unsubscribeBars: (subscriberUID) => { - console.log('[unsubscribeBars]: Method call with subscriberUID:', subscriberUID); + console.log('[unsubscribeBars]', subscriberUID); const [chainId, poolAddr, period] = subscriptions[subscriberUID] - delete subscriptions[subscriberUID] unsubOHLC(chainId, poolAddr, period) + delete subscriptions[subscriberUID] + const key = `${chainId}|${poolAddr}|${period}`; + console.log('unsub',key) + delete subscription_callbacks[key] }, - poolCallbackState : {lastBar: null}, + poolCallbackState : {lastBar:{'chain|pool|period':null}}, - poolCallback(chainId, pool, ohlcs) { - console.log("poolCallback: chainId, pool, ohlcs:", chainId, pool, ohlcs) + poolCallback(chainId, poolPeriod, ohlcs) { + console.log("poolCallback: chainId, pool, ohlcs:", chainId, poolPeriod, ohlcs) if (ohlcs == null) { console.log("poolCallback: ohlcs == null, nothing to do.") return; } + const key = `${chainId}|${poolPeriod}`; + console.log('key lookup',key,subscription_callbacks[key]) + const [onRealtimeCallback, onResetCacheNeededCallback] = subscription_callbacks[key] let ohlc = ohlcs.at(-1); console.log("poolCallBack ohlc:", new Date(Number(ohlc[0])*1000).toGMTString(), ohlc) for (let i = 0; i