Files
NodeBB/src/pubsub.js

71 lines
1.4 KiB
JavaScript
Raw Normal View History

2014-12-21 20:25:54 -05:00
'use strict';
2017-02-17 20:20:42 -07:00
var nconf = require('nconf');
var real;
var fake = {
publishQueue: [],
publish: function (event, data) {
fake.publishQueue.push({ event: event, data: data });
},
listenQueue: {},
on: function (event, callback) {
if (!Object.prototype.hasOwnProperty.call(fake.listenQueue, event)) {
fake.listenQueue[event] = [];
}
fake.listenQueue[event].push(callback);
},
removeAllListeners: function (event) {
delete fake.listenQueue[event];
},
2014-12-21 20:25:54 -05:00
};
function get() {
if (real) {
return real;
}
var pubsub;
2014-12-21 20:25:54 -05:00
if (nconf.get('isCluster') === 'false') {
var EventEmitter = require('events');
pubsub = new EventEmitter();
pubsub.publish = pubsub.emit.bind(pubsub);
} else if (nconf.get('redis')) {
pubsub = require('./database/redis').pubsub;
2014-12-21 20:25:54 -05:00
} else {
pubsub = require('./database').pubsub;
2014-12-21 20:25:54 -05:00
}
if (!pubsub) {
return fake;
}
Object.keys(fake.listenQueue).forEach(function (event) {
fake.listenQueue[event].forEach(function (callback) {
pubsub.on(event, callback);
});
});
fake.publishQueue.forEach(function (msg) {
pubsub.publish(msg.event, msg.data);
});
2014-12-21 20:25:54 -05:00
real = pubsub;
fake = null;
return pubsub;
}
module.exports = {
publish: function (event, data) {
get().publish(event, data);
},
on: function (event, callback) {
get().on(event, callback);
},
removeAllListeners: function (event) {
get().removeAllListeners(event);
},
};