UNPKG

acebase-client

Version:

Client to connect to an AceBase realtime database server

49 lines 1.7 kB
import { ID } from 'acebase-core'; import performance from './performance/index.js'; const time = { serverBias: 0, localBias: 0, lastTime: Date.now(), lastPerf: performance.now(), get bias() { return this.serverBias + this.localBias; }, }; function biasChanged() { console.log(`Bias changed. server bias = ${time.serverBias}ms, local bias = ${time.localBias}ms`); ID.timeBias = time.bias; // undocumented } // Keep monitoring local time for changes, adjust local bias accordingly const interval = 10000; // 10s function checkLocalTime() { // console.log('Checking time...'); const now = Date.now(), // eg 20:00:00 perf = performance.now(), msPassed = perf - time.lastPerf, // now - time.lastTime, // expected = time.lastTime + Math.round(msPassed), // 19:00:00 diff = expected - now; // -1h if (Math.abs(diff) > 1) { console.log(`Local time changed. diff = ${diff}ms`); time.localBias += diff; biasChanged(); } time.lastTime = now; time.lastPerf = perf; scheduleLocalTimeCheck(); } function scheduleLocalTimeCheck() { const timeout = setTimeout(checkLocalTime, interval); timeout.unref && timeout.unref(); // Don't delay exiting the main process when the event loop is empty } scheduleLocalTimeCheck(); export function setServerBias(bias) { if (typeof bias === 'number') { time.serverBias = bias; time.localBias = 0; biasChanged(); } } export class ServerDate extends Date { constructor() { const biasedTime = Date.now() + time.bias; super(biasedTime); } } //# sourceMappingURL=server-date.js.map