Streaming is limping
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import {subscribeOnStream, unsubscribeFromStream,} from './streaming.js';
|
||||
// import {subscribeOnStream, unsubscribeFromStream,} from './streaming.js';
|
||||
|
||||
import {jBars, tvResolutionToPeriodString} from './jBars.js';
|
||||
import {metadata} from "@/version.js";
|
||||
@@ -177,6 +177,33 @@ export function lookupBaseQuote(baseAddr, quoteAddr) {
|
||||
return _symbols[key]
|
||||
}
|
||||
|
||||
function poolIsInverted(pool) {
|
||||
let p
|
||||
for (p of metadata.p) {
|
||||
if (p.a==pool.substr(0,42)) {
|
||||
let fullname = `${p.q}${p.b}`
|
||||
let symbol = lookupSymbol(fullname)
|
||||
if (symbol in [undefined, null]) {
|
||||
throw error(`poolIsInverted: pool fullname not found: ${fullname}`)
|
||||
}
|
||||
return symbol.inverted
|
||||
// return p.x.data.inverted ^ symbol.inverted
|
||||
}
|
||||
}
|
||||
throw error(`poolIsInverted: pool not found in metadata.json: ${pool}`)
|
||||
}
|
||||
|
||||
export function maybeInvertBar (pool, bar) {
|
||||
if (poolIsInverted(pool)) {
|
||||
bar.open = 1/bar.open
|
||||
let high = bar.high
|
||||
bar.high = 1/bar.low
|
||||
bar.low = 1/high
|
||||
bar.close = 1/bar.close
|
||||
}
|
||||
return bar
|
||||
}
|
||||
|
||||
export const DataFeed = {
|
||||
onReady: (callback) => {
|
||||
console.log('[onReady]: Method call');
|
||||
@@ -252,7 +279,7 @@ export const DataFeed = {
|
||||
// todo need to consider the selected fee tier
|
||||
let bars, metadata;
|
||||
const pool = useChartOrderStore().selectedPool;
|
||||
[bars, metadata] = await jBars(symbolInfo, pool[0], from, to, resolution); // This is the one that does all the work
|
||||
[bars, metadata] = await jBars(lookupSymbol(symbolInfo.ticker), pool[0], from, to, resolution); // This is the one that does all the work
|
||||
if (firstDataRequest) {
|
||||
lastBarsCache.set(symbolInfo.full_name, {
|
||||
...bars[bars.length - 1],
|
||||
@@ -267,6 +294,8 @@ export const DataFeed = {
|
||||
}
|
||||
},
|
||||
|
||||
subscribeBarsOnRealtimeCallback: null,
|
||||
|
||||
subscribeBars: (
|
||||
symbolInfo,
|
||||
resolution,
|
||||
@@ -279,16 +308,17 @@ export const DataFeed = {
|
||||
const poolAddr = useChartOrderStore().selectedPool[0];
|
||||
const period = tvResolutionToPeriodString(resolution);
|
||||
subscriptions[subscriberUID] = [chainId, poolAddr, period]
|
||||
DataFeed.subscribeBarsOnRealtimeCallback = onRealtimeCallback;
|
||||
subOHLC(chainId, poolAddr, period)
|
||||
return; // disable
|
||||
subscribeOnStream(
|
||||
symbolInfo,
|
||||
resolution,
|
||||
onRealtimeCallback,
|
||||
subscriberUID,
|
||||
onResetCacheNeededCallback,
|
||||
lastBarsCache.get(symbolInfo.full_name),
|
||||
);
|
||||
// return; // disable
|
||||
// subscribeOnStream(
|
||||
// symbolInfo,
|
||||
// resolution,
|
||||
// onRealtimeCallback,
|
||||
// subscriberUID,
|
||||
// onResetCacheNeededCallback,
|
||||
// lastBarsCache.get(symbolInfo.full_name),
|
||||
// );
|
||||
},
|
||||
|
||||
unsubscribeBars: (subscriberUID) => {
|
||||
@@ -296,9 +326,56 @@ export const DataFeed = {
|
||||
const [chainId, poolAddr, period] = subscriptions[subscriberUID]
|
||||
delete subscriptions[subscriberUID]
|
||||
unsubOHLC(chainId, poolAddr, period)
|
||||
return; // disable
|
||||
unsubscribeFromStream(subscriberUID);
|
||||
// return; // disable
|
||||
// unsubscribeFromStream(subscriberUID);
|
||||
},
|
||||
|
||||
poolCallbackState : {lastBar: null},
|
||||
|
||||
poolCallback(chainId, pool, ohlcs) {
|
||||
let ohlc = ohlcs.at(-1);
|
||||
// for (const ohlc of ohlcs) {
|
||||
let date = new Date(ohlc[0]*1000)
|
||||
let close = ohlc[4] // close
|
||||
let bar = {
|
||||
time: date.getTime(),
|
||||
open: ohlc[1] ?? close, // open
|
||||
high: ohlc[2] ?? close, // high
|
||||
low: ohlc[3] ?? close, // low
|
||||
close: close,
|
||||
}
|
||||
// if (poolIsInverted(pool)) {
|
||||
// bar.open = 1/bar.open
|
||||
// let high = bar.high
|
||||
// bar.high = 1/bar.low
|
||||
// bar.low = 1/high
|
||||
// bar.close = 1/bar.close
|
||||
// }
|
||||
bar = maybeInvertBar(pool, bar)
|
||||
if (bar.high<bar.open||bar.high<bar.low||bar.high<bar.close ||
|
||||
bar.low>bar.open||bar.low>bar.high||bar.low>bar.close) {
|
||||
// throw error("poolCallback: bar.high/low inconsistent.")
|
||||
console.log("poolCallback: bar.high/low inconsistent.")
|
||||
}
|
||||
console.log('DataFeed.poolCallback', date.toGMTString(), ohlcs, bar)
|
||||
// No last bar then initialize bar
|
||||
if ( DataFeed.poolCallbackState.lastBar===null) {
|
||||
DataFeed.poolCallbackState.lastBar = bar
|
||||
}
|
||||
// bar is less than last bar then ignore
|
||||
else if (bar.time<DataFeed.poolCallbackState.lastBar.time ) {
|
||||
}
|
||||
// bar equal to last bar then replace last bar
|
||||
else if (bar.time==DataFeed.poolCallbackState.lastBar.time ) {
|
||||
DataFeed.poolCallbackState.lastBar = bar
|
||||
}
|
||||
// new bar, then render and replace last bar
|
||||
else {
|
||||
DataFeed.subscribeBarsOnRealtimeCallback(bar)
|
||||
DataFeed.poolCallbackState.lastBar = bar
|
||||
}
|
||||
// }
|
||||
}
|
||||
};
|
||||
|
||||
let defaultSymbol = null
|
||||
|
||||
Reference in New Issue
Block a user