SandboXP
1"use strict";2
3var WorkerBus = {};4
5/** @constructor */
6WorkerBus.Connector = function(pair)7{
8this.listeners = {};9this.pair = pair;10
11pair.addEventListener("message", function(e)12{13var data = e.data;14var listeners = this.listeners[data[0]];15
16for(var i = 0; i < listeners.length; i++)17{18var listener = listeners[i];19listener.fn.call(listener.this_value, data[1]);20}21}.bind(this), false);22
23};24
25WorkerBus.Connector.prototype.register = function(name, fn, this_value)26{
27var listeners = this.listeners[name];28
29if(listeners === undefined)30{31listeners = this.listeners[name] = [];32}33
34listeners.push({35fn: fn,36this_value: this_value,37});38};39
40/**
41* Send ("emit") a message
42*
43* @param {string} name
44* @param {*=} value
45* @param {*=} transfer_list
46*/
47WorkerBus.Connector.prototype.send = function(name, value, transfer_list)48{
49dbg_assert(arguments.length >= 1);50
51if(!this.pair)52{53return;54}55
56this.pair.postMessage([name, value], transfer_list);57};58
59
60WorkerBus.init = function(worker)61{
62return new WorkerBus.Connector(worker);63};64
65