hurricane/security_camera/resources/cloud_server/public/src/helpers/ElapsedTimer.js

export class ElapsedTimer {
constructor(callback, offsetMs = 0) {
this.timer = null
this.offsetMs = offsetMs
this.callback = callback
if(this.startTime >= 0 && this.callback) {
this._update()
}
}
start(offsetMs = 0, callback = null) {
this.startTime = Date.now()
this.offsetMs = offsetMs
if(callback) {
this.callback = callback
}
this._update()
}
stop() {
if(this.timer) {
clearInterval(this.timer)
this.timer = null
}
}
_update() {
this.stop()
let nextTime = 1
let elapsedMs = (Date.now() - this.startTime) + this.offsetMs
let elapsed = elapsedMs / 1000
this.callback(elapsedMs)
if(elapsed < 60) {
nextTime = 5
} else if(elapsed < 60 * 60) {
nextTime = 60
} else if(elapsed < 60 * 60 * 24) {
nextTime = 60 * 60
} else {
nextTime = 60 * 60 * 24
}
// logger.debug(`Next timeout: ${nextTime}`)
this.timer = setTimeout(this._update.bind(this), nextTime * 1000)
}
}
export const elapsedCallback = function(callback, offsetMs = 0) {
return new ElapsedTimer(callback, offsetMs)
}