JobScheduler, MkII
I’ve just re-written the JobScheduler, but can’t commit it from this hotel which blocks everything except web traffic. The new implementation has pluggable re-scheduling strategies, with three initial implementations for running once, running at fixed intervals with a random initial wait and for running on a boundary, such as on the hour or on the minute.
This testbed:
// import tv.zignal.log4es.LogFactory
// import tv.zignal.log4es.Logger
// import tv.zignal.integration.browser.FirebugLogAppender
// import tv.zignal.karateka.jobscheduler.BrowserTimerAdapter
// import tv.zignal.karateka.jobscheduler.JobScheduler
// Set up logging and the scheduler
var logger = LogFactory.getLogger("tv.zignal.testbed");
LogFactory.addAppender(new FirebugLogAppender(Logger.DEBUG));
var scheduler = new JobScheduler(new BrowserTimerAdapter());
//scheduler.log.setLevel(Logger.DEBUG); // enable to see JobScheduler inner workings
// Schedule four greetings to run at particular times
var now = new Date().getTime();
var hello = function hello() { logger.info("Hello!"); };
var anyone = function anyone() { logger.info("Anyone?"); };
var hi = function hi() { logger.info("Hi!"); };
scheduler.addOneTimeJob(hello, 10000);
scheduler.addOneTimeJob(anyone, 20000);
scheduler.addOneTimeJob(hi, 15000);
scheduler.addOneTimeJob(hi, 5000);
// Tell the time every ten seconds, on the ten-second mark. This would be useful for an on-screen clock.
var clockTick = function clockTick() { logger.info("It is now " + new Date()); };
scheduler.addJob(clockTick, null, new OnTheTickJobRescheduler(10 * 1000), "clock");
// Call "Yo!" every four seconds, not on any particular boundary.
var yo = function yo() { logger.info("Yo!"); };
scheduler.addRepeatableJob(yo, 4 * 1000, "yo");
// Cancel yo job after 30 seconds
var cancelYo = function cancelYo() {
scheduler.cancelJob("yo")
logger.info("Stopping the yo-yo");
}
scheduler.addOneTimeJob(cancelYo, 30*1000);
will produce this output in the firebug console:
tv.zignal.testbed | Yo! tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:30 GMT+0000 (GMT) tv.zignal.testbed | Yo! tv.zignal.testbed | Hi! tv.zignal.testbed | Yo! tv.zignal.testbed | Hello! tv.zignal.testbed | Yo! tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:40 GMT+0000 (GMT) tv.zignal.testbed | Hi! tv.zignal.testbed | Yo! tv.zignal.testbed | Anyone? tv.zignal.testbed | Yo! tv.zignal.testbed | It is now Sat Oct 27 2007 19:18:50 GMT+0000 (GMT) tv.zignal.testbed | Yo! tv.zignal.testbed | Yo! tv.zignal.testbed | Stopping the yo-yo tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:00 GMT+0000 (GMT) tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:10 GMT+0000 (GMT) tv.zignal.testbed | It is now Sat Oct 27 2007 19:19:20 GMT+0000 (GMT)
and a lot more if you un-comment the line setting the shceduler log level to debug.