const { time } = require('lib/time-utils.js'); class PoorManIntervals { static setInterval(callback, interval) { PoorManIntervals.intervalId_++; PoorManIntervals.intervals_.push({ id: PoorManIntervals.intervalId_, callback: callback, interval: interval, lastIntervalTime: time.unixMs(), }); return PoorManIntervals.intervalId_; } static setTimeout(callback, interval) { PoorManIntervals.intervalId_++; PoorManIntervals.intervals_.push({ id: PoorManIntervals.intervalId_, callback: callback, interval: interval, lastIntervalTime: time.unixMs(), oneOff: true, }); return PoorManIntervals.intervalId_; } static intervalById(id) { for (let i = 0; i < PoorManIntervals.intervals_.length; i++) { if (PoorManIntervals.intervals_[i].id == id) return PoorManIntervals.intervals_[id]; } return null; } static clearInterval(id) { for (let i = 0; i < PoorManIntervals.intervals_.length; i++) { if (PoorManIntervals.intervals_[i].id == id) { PoorManIntervals.intervals_.splice(i, 1); break; } } } static update() { // Don't update more than once a second if (PoorManIntervals.lastUpdateTime_ + 1000 > time.unixMs()) return; for (let i = 0; i < PoorManIntervals.intervals_.length; i++) { let interval = PoorManIntervals.intervals_[i]; const now = time.unixMs(); if (now - interval.lastIntervalTime >= interval.interval) { interval.lastIntervalTime = now; interval.callback(); if (interval.oneOff) { this.clearInterval(interval.id); } } } PoorManIntervals.lastUpdateTime_ = time.unixMs(); } } PoorManIntervals.lastUpdateTime_ = 0; PoorManIntervals.intervalId_ = 0; PoorManIntervals.intervals_ = []; module.exports = { PoorManIntervals };