Worker bus, #20

This commit is contained in:
copy 2015-04-12 20:21:38 +02:00
parent 5c9ba37c5b
commit 089531b8cc
3 changed files with 66 additions and 2 deletions

View file

@ -47,7 +47,7 @@ CORE_FILES=const.js io.js main.js lib.js fpu.js ide.js pci.js floppy.js memory.j
LIB_FILES=../lib/9p.js ../lib/filesystem.js ../lib/jor1k.js ../lib/marshall.js ../lib/utf8.js
BROWSER_FILES=browser/screen.js\
browser/keyboard.js browser/mouse.js browser/serial.js\
browser/network.js browser/lib.js browser/starter.js
browser/network.js browser/lib.js browser/starter.js browser/worker_bus.js
build/v86_all.js: src/*.js src/browser/*.js build/cpu.js lib/*.js
-ls -lh build/v86_all.js

View file

@ -5,7 +5,7 @@
var CORE_FILES = "const.js io.js main.js lib.js ide.js fpu.js pci.js floppy.js " +
"memory.js dma.js pit.js vga.js ps2.js pic.js rtc.js uart.js acpi.js hpet.js " +
"ne2k.js state.js virtio.js bus.js log.js";
var BROWSER_FILES = "main.js screen.js keyboard.js mouse.js serial.js lib.js network.js starter.js";
var BROWSER_FILES = "main.js screen.js keyboard.js mouse.js serial.js lib.js network.js starter.js worker_bus.js";
var LIB_FILES = "esprima.js walk.js";
// jor1k stuff

64
src/browser/worker_bus.js Normal file
View file

@ -0,0 +1,64 @@
"use strict";
var WorkerBus = {};
/** @constructor */
WorkerBus.Connector = function(pair)
{
this.listeners = {};
this.pair = pair;
pair.addEventListener("message", function(e)
{
var data = e.data;
var listeners = this.listeners[data[0]];
for(var i = 0; i < listeners.length; i++)
{
var listener = listeners[i];
listener.fn.call(listener.this_value, data[1]);
}
}.bind(this), false);
};
WorkerBus.Connector.prototype.register = function(name, fn, this_value)
{
var listeners = this.listeners[name];
if(listeners === undefined)
{
listeners = this.listeners[name] = [];
}
listeners.push({
fn: fn,
this_value: this_value,
});
};
/**
* Send ("emit") a message
*
* @param {string} name
* @param {*=} value
* @param {*=} transfer_list
*/
WorkerBus.Connector.prototype.send = function(name, value, transfer_list)
{
dbg_assert(arguments.length >= 1);
if(!this.pair)
{
return;
}
this.pair.postMessage([name, value], transfer_list);
};
WorkerBus.init = function(worker)
{
return new WorkerBus.Connector(worker);
};