mirror of
https://github.com/wassname/talk.git
synced 2026-06-29 05:18:32 +08:00
49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
const { EventEmitter2 } = require('eventemitter2');
|
|
const debug = require('debug')('talk:graph:subscriptions:broker');
|
|
const { getPubsub } = require('./pubsub');
|
|
|
|
/**
|
|
* Broker acts as a pubsub client adapter. Any calls to publish will push into
|
|
* the PubSub client and the local event emitter.
|
|
*/
|
|
class Broker extends EventEmitter2 {
|
|
constructor(pubsub) {
|
|
// Create the underlying event emitter.
|
|
super({
|
|
wildcard: true, // Allow wildcard listeners.
|
|
maxListeners: 0, // Disable maximum for listeners.
|
|
});
|
|
|
|
this.pubsub = pubsub;
|
|
}
|
|
|
|
/**
|
|
* Publishes the event out to the pubsub system and to the broker.
|
|
*
|
|
* @param {String} event the name of the event to publish
|
|
* @param {Any} args the
|
|
*/
|
|
publish(event, ...args) {
|
|
debug(`publish:${event}`);
|
|
this.pubsub.publish(event, ...args);
|
|
this.emit(event, ...args);
|
|
}
|
|
}
|
|
|
|
let client = null;
|
|
const getBroker = () => {
|
|
if (client !== null) {
|
|
return client;
|
|
}
|
|
|
|
// Create the new Broker to manage events being published out to
|
|
// the pubsub so that we may intercept.
|
|
client = new Broker(getPubsub());
|
|
|
|
debug('created');
|
|
|
|
return client;
|
|
};
|
|
|
|
module.exports.getBroker = getBroker;
|