Worker bus, #20
This commit is contained in:
parent
5c9ba37c5b
commit
089531b8cc
2
Makefile
2
Makefile
|
@ -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
|
||||
|
|
|
@ -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
64
src/browser/worker_bus.js
Normal 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);
|
||||
};
|
||||
|
Loading…
Reference in a new issue