53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
|
/* Web Worker interface */
|
||
|
var Ground = require("./ground.js").Ground;
|
||
|
var Util = require("./util.js");
|
||
|
var Codec = require("./codec.js");
|
||
|
|
||
|
var Dataspace = require("./dataspace.js").Dataspace;
|
||
|
|
||
|
var BuiltinWorker = typeof window !== 'undefined' && window.Worker;
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
function Worker(scriptUrl) {
|
||
|
this.scriptUrl = scriptUrl;
|
||
|
this.w = new BuiltinWorker(scriptUrl);
|
||
|
}
|
||
|
|
||
|
Worker.prototype.boot = function () {
|
||
|
this.w.onmessage = Dataspace.wrap(function (e) {
|
||
|
console.log("Received from worker", JSON.stringify(e.data));
|
||
|
Dataspace.enqueueAction(Codec.decodeAction(e.data));
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Worker.prototype.handleEvent = function (e) {
|
||
|
console.log("Sending to worker", JSON.stringify(Codec.encodeEvent(e)));
|
||
|
this.w.postMessage(Codec.encodeEvent(e));
|
||
|
};
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
function WorkerGround(bootFn) {
|
||
|
var self = this;
|
||
|
Ground.call(this, bootFn);
|
||
|
onmessage = function (e) {
|
||
|
console.log("Received from main page", JSON.stringify(e.data));
|
||
|
self.dataspace.handleEvent(Codec.decodeEvent(e.data));
|
||
|
self.startStepping();
|
||
|
};
|
||
|
}
|
||
|
|
||
|
WorkerGround.prototype = Util.extend({}, Ground.prototype);
|
||
|
|
||
|
WorkerGround.prototype.enqueueAction = function (pid, action) {
|
||
|
console.log("Sending to main page", JSON.stringify(Codec.encodeAction(action)));
|
||
|
postMessage(Codec.encodeAction(action));
|
||
|
console.log("Sent to main page");
|
||
|
};
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
module.exports.Worker = Worker;
|
||
|
module.exports.WorkerGround = WorkerGround;
|