UNPKG

copious-transitions

Version:
77 lines (64 loc) 2.15 kB
/** * This class is the root class for most classes in lib directory. * This class handles the creation of interval timers required by some messaging and storage aspects of the application. * This class allows for a graceful shutdown of operations, closing off resources that may prevent the termination of * an application. Furthermore, it is tasked with establishing safe conditions for termination. * * * @memberof base */ class GeneralAppLifeCycle { // constructor() { this.intervalRefs = [] this.timerRefs = {} this.app_shutdown = false this.tindex = 0 global_shutdown_manager.add_me_to_shutdown(this) } // shutdown() { if ( this.intervalRefs && this.intervalRefs.length ) { this.intervalRefs.forEach((interval) => { clearInterval(interval) }) } this.intervalRefs = [] if ( this.timerRefs ) { for ( let tt in this.timerRefs ) { this.remove_timer(tt) } } this.timerRefs = null // if ( this.app_shutdown && ( typeof this.app_shutdown === "function" ) ) { this.app_shutdown() } } add_interval(iref) { this.intervalRefs.push(iref) } // remove_interval -- for the application if the interval is removed before shutdown remove_interval(iref) { let idx = this.intervalRefs.indexOf(iref) if ( idx >= 0 ) { clearInterval(iref) this.intervalRefs.splice(idx,1) } } add_timer(tt,timer) { this.timerRefs[tt] = timer } remove_timer(tt) { let timerRef = this.timerRefs[tt] if ( timerRef ) clearTimeout(timerRef) delete this.timerRefs[tt] } // add_timeout -- best for timers expected to be extant for a long time (shorter ones might be managed by their app) add_timeout(fn,time_lapse) { let tt = this.tindex++ let timer = setTimeout(() => { this.removeTimer(tt), fn()}, time_lapse) this.add_timer(tt,timer) } } module.exports = GeneralAppLifeCycle