Server IP : 162.213.251.212 / Your IP : 3.134.245.35 [ Web Server : LiteSpeed System : Linux business55.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : allssztx ( 535) PHP Version : 8.1.31 Disable Function : NONE Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/allssztx/needapair.com/node_modules/node-cron/src/ |
Upload File : |
'use strict'; const EventEmitter = require('events'); const TimeMatcher = require('./time-matcher'); class Scheduler extends EventEmitter{ constructor(pattern, timezone, autorecover){ super(); this.timeMatcher = new TimeMatcher(pattern, timezone); this.autorecover = autorecover; } start(){ // clear timeout if exists this.stop(); let lastCheck = process.hrtime(); let lastExecution = this.timeMatcher.apply(new Date()); const matchTime = () => { const delay = 1000; const elapsedTime = process.hrtime(lastCheck); const elapsedMs = (elapsedTime[0] * 1e9 + elapsedTime[1]) / 1e6; const missedExecutions = Math.floor(elapsedMs / 1000); for(let i = missedExecutions; i >= 0; i--){ const date = new Date(new Date().getTime() - i * 1000); let date_tmp = this.timeMatcher.apply(date); if(lastExecution.getTime() < date_tmp.getTime() && (i === 0 || this.autorecover) && this.timeMatcher.match(date)){ this.emit('scheduled-time-matched', date_tmp); date_tmp.setMilliseconds(0); lastExecution = date_tmp; } } lastCheck = process.hrtime(); this.timeout = setTimeout(matchTime, delay); }; matchTime(); } stop(){ if(this.timeout){ clearTimeout(this.timeout); } this.timeout = null; } } module.exports = Scheduler;