48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
// Wake detector - notices when something (such as
|
||
|
// suspension/sleeping!) has caused periodic activities to be
|
||
|
// interrupted, and warns others about it
|
||
|
// Inspired by http://blog.alexmaccaw.com/javascript-wake-event
|
||
|
|
||
|
var Patch = require("./patch.js");
|
||
|
var Struct = require('./struct.js');
|
||
|
|
||
|
var Dataspace_ = require("./dataspace.js");
|
||
|
var Dataspace = Dataspace_.Dataspace;
|
||
|
var __ = Dataspace_.__;
|
||
|
var _$ = Dataspace_._$;
|
||
|
|
||
|
var wakeEvent = Struct.makeConstructor('wakeEvent', []);
|
||
|
|
||
|
function spawnWakeDetector(periodOpt) {
|
||
|
Dataspace.spawn(new WakeDetector(periodOpt));
|
||
|
}
|
||
|
|
||
|
function WakeDetector(periodOpt) {
|
||
|
this.period = periodOpt || 10000;
|
||
|
this.mostRecentTrigger = +(new Date());
|
||
|
this.timerId = null;
|
||
|
}
|
||
|
|
||
|
WakeDetector.prototype.boot = function () {
|
||
|
var self = this;
|
||
|
this.timerId = setInterval(Dataspace.wrap(function () { self.trigger(); }), this.period);
|
||
|
return Patch.pub(wakeEvent());
|
||
|
};
|
||
|
|
||
|
WakeDetector.prototype.handleEvent = function (e) {};
|
||
|
|
||
|
WakeDetector.prototype.trigger = function () {
|
||
|
var now = +(new Date());
|
||
|
if (now - this.mostRecentTrigger > this.period * 1.5) {
|
||
|
Dataspace.send(wakeEvent());
|
||
|
}
|
||
|
this.mostRecentTrigger = now;
|
||
|
};
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
module.exports.spawnWakeDetector = spawnWakeDetector;
|
||
|
module.exports.WakeDetector = WakeDetector;
|
||
|
module.exports.wakeEvent = wakeEvent;
|