123 lines
3.7 KiB
JavaScript
123 lines
3.7 KiB
JavaScript
import Schedule from '../src/schedule.js'
|
|
import Runner from '../src/runner.js'
|
|
|
|
import delay from 'delay'
|
|
|
|
const dt = new Date()
|
|
|
|
const NZONES = 6
|
|
const ZONE = {
|
|
duration: 3,
|
|
settings:{
|
|
enabled: true,
|
|
simultaneous: false,
|
|
timing: {
|
|
hour: dt.getHours(),
|
|
minute: dt.getMinutes()+(dt.getSeconds()+5)/60,
|
|
delta: 12
|
|
}
|
|
}
|
|
}
|
|
|
|
;
|
|
(async () => {
|
|
|
|
let zones = []
|
|
let schs = []
|
|
for (let zone=0; zone < NZONES; zone++) {
|
|
let opts = Object.assign({},ZONE)
|
|
opts.name = 'sch-zone-'+(zone+1)
|
|
opts.id= 'zone-'+(zone+1),
|
|
zones[zone] = opts
|
|
let min = opts.settings.timing.minute
|
|
// console.log(zones[zone].id,opts.min)
|
|
let last = ((zone+1) % 3 ? 0 : 1)
|
|
// console.log(opts.id, 'last', last, min)
|
|
// console.log('zone:',opts)
|
|
schs[zone] = new Schedule (opts)
|
|
opts.settings.timing.minute = min + last * zone * .1
|
|
// schs[zone].rxSubscribe('nextTS','TS',function (val) {
|
|
// console.log(schs[zone].name, 'subscription: nextTS was updated', val)
|
|
// })
|
|
// console.log('register action !!!!!!!!!!!!!!!!!!!!!')
|
|
// console.log(schs[zone].name,zones[zone])
|
|
schs[zone].registerStartAction(startAsync,zones[zone])
|
|
schs[zone].registerStopAction(stop,zones[zone])
|
|
// console.log('register action done!!!!!!!!!!!!!!!!!!!!!')
|
|
}
|
|
|
|
const runner = new Runner ({
|
|
name: 'example',
|
|
// one: true,
|
|
schedules: schs,
|
|
})
|
|
|
|
runner.rxSubscribe('countdown','runner',value => { console.log('trigger #', runner._toID,'in', value)})
|
|
runner.rxSubscribe('running','runner',list => { console.log('running schedules:',list)})
|
|
runner.rxSubscribe('queue','runner',list => { console.log('queued schedules:',list)})
|
|
runner.rxSubscribe('queueCount','runner',value => { console.log('queue schedule count', value)})
|
|
runner.rxSubscribe('runningCount','runner',value => { console.log('running schedule count', value)})
|
|
|
|
// setInterval(() => {
|
|
// console.log('resetting mintue')
|
|
// runner.nextSchedule.minute+=1
|
|
// // console.log(runner.nextSchedule.get('settings'))
|
|
// },
|
|
// 60*1000
|
|
// )
|
|
runner.enabled=true
|
|
// setTimeout(()=>runner.enabled=false,6000)
|
|
|
|
})().catch(err => {
|
|
console.error('FATAL: UNABLE TO START SYSTEM!\n',err)
|
|
// process.kill(process.pid, 'SIGTERM')
|
|
})
|
|
|
|
|
|
// ACTIONS
|
|
|
|
// MUST be promise returning and NOT an arrow function
|
|
function stop (zone,activeSch) {
|
|
console.log('stop action: aborting run for action id',activeSch.runID, 'zone',zone.id)
|
|
this.emit('abort:'+activeSch.runID)
|
|
}
|
|
|
|
async function startAsync (zone,activeSch) {
|
|
// console.log('async start function')
|
|
console.log('-----running----->>',zone.id, activeSch.runID)
|
|
// console.log('---waiting-----', zone.duration,'secs duration to complete')
|
|
const tick = setInterval(()=>{
|
|
console.log('duration tick',zone.id)
|
|
}, 1000)
|
|
const duration = delay(zone.duration*1000)
|
|
this.once('abort:'+activeSch.runID,()=> {
|
|
console.log('aborting run>>>', activeSch.runID)
|
|
duration.clear()
|
|
})
|
|
await duration
|
|
clearInterval(tick)
|
|
this.removeAllListeners('abort:'+activeSch.runID)
|
|
console.log('stopping', activeSch.runID)
|
|
}
|
|
|
|
function startPromise (zone,activeSch) {
|
|
console.log('promise return start function', this.evName)
|
|
return new Promise(resolve => {
|
|
console.log('starting>>>',zone.id)
|
|
console.log('---waiting-----', zone.duration,'secs duration to complete')
|
|
const tick = setInterval(()=>{
|
|
console.log('duration tick',zone.id)
|
|
}, 1000)
|
|
this.once('abort:'+activeSch.runID,()=> {
|
|
clearTimeout(run)
|
|
console.log('aborting run>>>', activeSch.runID)
|
|
})
|
|
const run = setTimeout(()=>{
|
|
console.log('stopping>>>',activeSch.runID)
|
|
clearInterval(tick)
|
|
this.removeAllListeners('abort:'+activeSch.runID)
|
|
resolve()
|
|
}, zone.duration*1000)
|
|
})
|
|
}
|