ajsfw
Version:
Ajs Framework
62 lines (61 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var messageTransport = require("../message-transport");
var exceptions = require("./exceptions");
exports.ajsWorkerInstance = null;
var AjsWebWorker = (function (_super) {
__extends(AjsWebWorker, _super);
function AjsWebWorker(workerScriptUrl, workerLibraries, initCode) {
var _this = _super.call(this) || this;
_this.__initialized = false;
_this.__initState = 0;
_this.__workerLibraries = workerLibraries;
_this.__workerInitCode = _this.__getFunctionCode(initCode);
_this.__worker = new Worker(workerScriptUrl);
_this.__worker.addEventListener("message", function (event) { _this._receive(event); });
_this.__initialize();
return _this;
}
AjsWebWorker.prototype._receive = function (event) {
if (!this.__initialized) {
this.__initialize(event);
return;
}
this._onReceived(event.data);
};
AjsWebWorker.prototype._send = function (message) {
if (!this.__initialized) {
throw new exceptions.AjsWorkerNotInitializedException();
}
this.__worker.postMessage(message);
};
AjsWebWorker.prototype.__initialize = function (event) {
switch (this.__initState) {
case 0:
this.__worker.postMessage(this.__workerLibraries);
this.__initState++;
break;
case 1:
if (event === undefined || event.data === undefined || event.data !== "librariesLoaded") {
throw new exceptions.UnexpectedAjsWorkerInitializationResponseException();
}
this.__worker.postMessage(this.__workerInitCode);
this.__initState++;
break;
case 2:
this.__initialized = true;
if (event === undefined || event.data === undefined || event.data !== "initDone") {
throw new exceptions.UnexpectedAjsWorkerInitializationResponseException();
}
break;
default:
throw new exceptions.InvalidAjsWorkerInitializationStateException();
}
};
AjsWebWorker.prototype.__getFunctionCode = function (fn) {
var code = "(" + fn.toString() + ")()";
return code;
};
return AjsWebWorker;
}(messageTransport.TransportInterface));
exports.AjsWebWorker = AjsWebWorker;