53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
|
|
|
'use strict';
|
|
|
|
|
|
function MessageHandler(name, comObj) {
|
|
this.name = name;
|
|
this.comObj = comObj;
|
|
var ah = this.actionHandler = {};
|
|
|
|
ah["console_log"] = [function(data) {
|
|
console.log.apply(console, data);
|
|
}]
|
|
ah["console_error"] = [function(data) {
|
|
console.error.apply(console, data);
|
|
}]
|
|
|
|
comObj.onmessage = function(event) {
|
|
var data = event.data;
|
|
if (data.action in ah) {
|
|
var action = ah[data.action];
|
|
action[0].call(action[1], data.data);
|
|
} else {
|
|
throw 'Unkown action from worker: ' + data.action;
|
|
}
|
|
};
|
|
}
|
|
|
|
MessageHandler.prototype = {
|
|
on: function(actionName, handler, scope) {
|
|
var ah = this.actionHandler;
|
|
if (ah[actionName]) {
|
|
throw "There is already an actionName called '" + actionName + "'";
|
|
}
|
|
ah[actionName] = [handler, scope];
|
|
},
|
|
|
|
send: function(actionName, data) {
|
|
try {
|
|
this.comObj.postMessage({
|
|
action: actionName,
|
|
data: data
|
|
});
|
|
} catch (e) {
|
|
console.error("FAILED to send data from", this.name);
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
}
|
|
|