openfl
Version:
A fast, productive library for 2D cross-platform development.
149 lines (134 loc) • 5.22 kB
JavaScript
// Class: lime._internal.backend.html5.HTML5Thread
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../../../hxClasses_stub").default;
var $hxEnums = require("./../../../../hxEnums_stub").default;
var $import = require("./../../../../import_stub").default;
var $bind = require("./../../../../bind_stub").default;
function lime__$internal_backend_html5__$HTML5Thread_Message_$Impl_$() {return require("./../../../../lime/_internal/backend/html5/_HTML5Thread/Message_Impl_");}
function haxe_CallStack() {return require("./../../../../haxe/CallStack");}
function js__$Boot_HaxeError() {return require("./../../../../js/_Boot/HaxeError");}
function haxe_ds_List() {return require("./../../../../haxe/ds/List");}
function HxOverrides() {return require("./../../../../HxOverrides");}
function lime_app_Application() {return require("./../../../../lime/app/Application");}
function lime__$internal_backend_html5__$HTML5Thread_WorkFunction_$Impl_$() {return require("./../../../../lime/_internal/backend/html5/_HTML5Thread/WorkFunction_Impl_");}
function lime_app__$Event_$Dynamic_$Void() {return require("./../../../../lime/app/_Event_Dynamic_Void");}
// Constructor
var HTML5Thread = function(href,worker) {
this.__href = href;
if(worker != null) {
this.__worker = worker;
this.__worker.onmessage = $bind(this,this.dispatchMessage);
this.onMessage = new (lime_app__$Event_$Dynamic_$Void().default)();
}
(lime__$internal_backend_html5__$HTML5Thread_Message_$Impl_$().default).disablePreserveClasses(this);
}
// Meta
HTML5Thread.__name__ = "lime._internal.backend.html5.HTML5Thread";
HTML5Thread.__isInterface__ = false;
HTML5Thread.prototype = {
sendMessage: function(message,transferList,preserveClasses) {
if(preserveClasses == null) {
preserveClasses = true;
}
if(this.__worker != null) {
if(preserveClasses) {
(lime__$internal_backend_html5__$HTML5Thread_Message_$Impl_$().default).preserveClasses(message);
}
this.__worker.postMessage(message,transferList);
} else {
HTML5Thread.__messages.add(message);
}
},
dispatchMessage: function(event) {
var message = event.data;
(lime__$internal_backend_html5__$HTML5Thread_Message_$Impl_$().default).restoreClasses(message);
if(this.onMessage != null) {
this.onMessage.dispatch(message);
}
if(HTML5Thread.__resolveMethods.isEmpty()) {
HTML5Thread.__messages.add(message);
} else {
(HTML5Thread.__resolveMethods.pop())(message);
}
},
destroy: function() {
if(this.__worker != null) {
this.__worker.terminate();
} else if(HTML5Thread.__isWorker) {
try {
$global.close();
} catch( e ) {
(haxe_CallStack().default).lastException = e;
var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e;
}
}
},
isWorker: function() {
if(this.__worker == null) {
return HTML5Thread.__isWorker;
} else {
return true;
}
}
};
HTML5Thread.prototype.__class__ = HTML5Thread.prototype.constructor = $hxClasses["lime._internal.backend.html5.HTML5Thread"] = HTML5Thread;
// Init
if(typeof window == "undefined") {
$global.onmessage = function(event) {
var job = event.data;
try {
$global.onmessage = ($_=HTML5Thread.__current,$bind($_,$_.dispatchMessage));
((lime__$internal_backend_html5__$HTML5Thread_WorkFunction_$Impl_$().default).toFunction(job))();
} catch( e ) {
(haxe_CallStack().default).lastException = e;
var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e;
HTML5Thread.__current.destroy();
}
};
};
// Statics
HTML5Thread.current = function() {
return HTML5Thread.__current;
}
HTML5Thread.create = function(job) {
var url = new URL(HTML5Thread.__current.__href);
url.pathname = (HxOverrides().default).substr(url.pathname,0,url.pathname.lastIndexOf("/") + 1) + (lime_app_Application().default).current.meta.get("file") + ".js";
if(url.hash.length > 0) {
url.hash += "_";
}
url.hash += HTML5Thread.__workerCount;
HTML5Thread.__workerCount++;
(lime__$internal_backend_html5__$HTML5Thread_WorkFunction_$Impl_$().default).makePortable(job);
var thread = new HTML5Thread(url.href,new Worker(url.href));
thread.sendMessage(job);
return thread;
}
HTML5Thread.zeroDelay = function() {
return new Promise(function(resolve,_) {
$global.setTimeout(resolve);
});
}
HTML5Thread.returnMessage = function(message,transferList,preserveClasses) {
if(preserveClasses == null) {
preserveClasses = true;
}
if(HTML5Thread.__isWorker) {
if(preserveClasses) {
(lime__$internal_backend_html5__$HTML5Thread_Message_$Impl_$().default).preserveClasses(message);
}
$global.postMessage(message,transferList);
}
}
HTML5Thread.equals = function(a,b) {
return a.__href == b.__href;
}
HTML5Thread.__current = new HTML5Thread($global.location.href)
HTML5Thread.__isWorker = typeof window == "undefined"
HTML5Thread.__messages = new (haxe_ds_List().default)()
HTML5Thread.__resolveMethods = new (haxe_ds_List().default)()
HTML5Thread.__workerCount = 0
// Export
exports.default = HTML5Thread;