mirror of
https://github.com/xevidos/codiad.git
synced 2024-11-10 21:26:35 +01:00
72 lines
2.2 KiB
JavaScript
Executable File
72 lines
2.2 KiB
JavaScript
Executable File
(function(global, $){
|
|
|
|
codiad.workerManager = {
|
|
taskQueue: [],
|
|
addTask: function(taskConfig, callback, context){
|
|
var _this = this;
|
|
if(_this.worker !== null) {
|
|
this.taskQueue.push({
|
|
config: taskConfig,
|
|
callback: callback,
|
|
context: context
|
|
});
|
|
|
|
this.clearSubsidableTasks(taskConfig.id);
|
|
|
|
if (! this.workerRunning()) {
|
|
var initStatus = this.initiateWorker();
|
|
if (! initStatus) {
|
|
callback(null, false);
|
|
return;
|
|
}
|
|
this.worker.addEventListener('message', function(e){
|
|
_this.concludeTask(e.data);
|
|
}, false);
|
|
}
|
|
|
|
if (this.taskQueue.length == 1) {
|
|
this.scheduleNext();
|
|
}
|
|
} else {
|
|
callback(false,taskConfig.id);
|
|
}
|
|
},
|
|
workerRunning: function(){
|
|
return !! this.worker;
|
|
},
|
|
initiateWorker: function(){
|
|
if ( typeof Worker !== 'undefined' && Worker !== null )
|
|
{
|
|
this.worker = new Worker('components/worker_manager/worker.js');
|
|
return !! this.worker;
|
|
}
|
|
},
|
|
clearSubsidableTasks: function(id){
|
|
var i = this.taskQueue.length -2;
|
|
while(i > 0) {
|
|
if (this.taskQueue[i].id == id) {
|
|
this.taskQueue.splice(i, 1);
|
|
}
|
|
i--;
|
|
}
|
|
},
|
|
scheduleNext: function(){
|
|
var taskConfig = this.taskQueue[0].config;
|
|
this.worker.postMessage(taskConfig);
|
|
},
|
|
concludeTask: function(msg){
|
|
if (this.taskQueue.length > 0) {
|
|
var tq = this.taskQueue[0];
|
|
callback = tq.callback;
|
|
context = tq.context;
|
|
this.taskQueue.splice(0, 1);
|
|
if (this.taskQueue.length > 0) {
|
|
this.scheduleNext();
|
|
}
|
|
tq.callback.apply(context, [msg.success, msg.result]);
|
|
}
|
|
}
|
|
}
|
|
|
|
})(this, jQuery);
|