2014-12-25 02:32:18 +01:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var Bus = {};
|
|
|
|
|
|
|
|
/** @constructor */
|
2015-12-30 23:30:54 +01:00
|
|
|
function BusConnector()
|
2014-12-25 02:32:18 +01:00
|
|
|
{
|
|
|
|
this.listeners = {};
|
|
|
|
this.pair = undefined;
|
|
|
|
};
|
|
|
|
|
2015-01-09 04:21:01 +01:00
|
|
|
/**
|
|
|
|
* @param {string} name
|
2015-02-25 18:21:54 +01:00
|
|
|
* @param {function(*=)} fn
|
2015-01-09 04:21:21 +01:00
|
|
|
* @param {Object} this_value
|
2015-01-09 04:21:01 +01:00
|
|
|
*/
|
2015-12-30 23:30:54 +01:00
|
|
|
BusConnector.prototype.register = function(name, fn, this_value)
|
2014-12-25 02:32:18 +01:00
|
|
|
{
|
|
|
|
var listeners = this.listeners[name];
|
|
|
|
|
|
|
|
if(listeners === undefined)
|
|
|
|
{
|
|
|
|
listeners = this.listeners[name] = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
listeners.push({
|
|
|
|
fn: fn,
|
2015-01-09 04:21:21 +01:00
|
|
|
this_value: this_value,
|
2014-12-25 02:32:18 +01:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2015-01-09 04:21:01 +01:00
|
|
|
/**
|
|
|
|
* Unregister one message with the given name and callback
|
|
|
|
*
|
|
|
|
* @param {string} name
|
|
|
|
* @param {function()} fn
|
|
|
|
*/
|
2015-12-30 23:30:54 +01:00
|
|
|
BusConnector.prototype.unregister = function(name, fn)
|
2015-01-09 04:21:01 +01:00
|
|
|
{
|
|
|
|
var listeners = this.listeners[name];
|
|
|
|
|
|
|
|
if(listeners === undefined)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.listeners[name] = listeners.filter(function(l)
|
|
|
|
{
|
|
|
|
return l.fn !== fn
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2014-12-26 20:36:58 +01:00
|
|
|
/**
|
2015-01-06 20:22:42 +01:00
|
|
|
* Send ("emit") a message
|
|
|
|
*
|
2014-12-26 20:36:58 +01:00
|
|
|
* @param {string} name
|
2015-02-25 18:21:54 +01:00
|
|
|
* @param {*=} value
|
2015-04-12 16:47:31 +02:00
|
|
|
* @param {*=} unused_transfer
|
2014-12-26 20:36:58 +01:00
|
|
|
*/
|
2015-12-30 23:30:54 +01:00
|
|
|
BusConnector.prototype.send = function(name, value, unused_transfer)
|
2014-12-25 02:32:18 +01:00
|
|
|
{
|
|
|
|
if(!this.pair)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var listeners = this.pair.listeners[name];
|
|
|
|
|
|
|
|
if(listeners === undefined)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
for(var i = 0; i < listeners.length; i++)
|
|
|
|
{
|
|
|
|
var listener = listeners[i];
|
2015-01-09 04:21:21 +01:00
|
|
|
listener.fn.call(listener.this_value, value);
|
2014-12-25 02:32:18 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-01-06 20:22:42 +01:00
|
|
|
/**
|
|
|
|
* Send a message, guaranteeing that it is received asynchronously
|
|
|
|
*
|
|
|
|
* @param {string} name
|
|
|
|
* @param {Object=} value
|
|
|
|
*/
|
2015-12-30 23:30:54 +01:00
|
|
|
BusConnector.prototype.send_async = function(name, value)
|
2015-01-06 20:22:42 +01:00
|
|
|
{
|
|
|
|
dbg_assert(arguments.length === 1 || arguments.length === 2);
|
|
|
|
|
|
|
|
setTimeout(this.send.bind(this, name, value), 0);
|
|
|
|
};
|
|
|
|
|
2014-12-25 02:32:18 +01:00
|
|
|
Bus.create = function()
|
|
|
|
{
|
2015-12-30 23:30:54 +01:00
|
|
|
var c0 = new BusConnector();
|
|
|
|
var c1 = new BusConnector();
|
2014-12-25 02:32:18 +01:00
|
|
|
|
|
|
|
c0.pair = c1;
|
|
|
|
c1.pair = c0;
|
|
|
|
|
|
|
|
return [c0, c1];
|
|
|
|
};
|
|
|
|
|