Files
NodeBB/src/pubsub.js

49 lines
1021 B
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 util = require('util');
var winston = require('winston');
var EventEmitter = require('events').EventEmitter;
2014-12-21 20:25:54 -05:00
2015-04-14 11:01:11 -04:00
var channelName;
var PubSub = function () {
2014-12-21 20:25:54 -05:00
var self = this;
if (nconf.get('redis')) {
var redis = require('./database/redis');
var subClient = redis.connect();
this.pubClient = redis.connect();
2015-04-14 11:01:11 -04:00
channelName = 'db:' + nconf.get('redis:database') + 'pubsub_channel';
subClient.subscribe(channelName);
2014-12-21 20:25:54 -05:00
subClient.on('message', function (channel, message) {
2015-04-14 11:01:11 -04:00
if (channel !== channelName) {
2014-12-21 20:25:54 -05:00
return;
}
try {
var msg = JSON.parse(message);
self.emit(msg.event, msg.data);
} catch (err) {
2014-12-21 20:25:54 -05:00
winston.error(err.stack);
}
});
}
};
util.inherits(PubSub, EventEmitter);
PubSub.prototype.publish = function (event, data) {
2014-12-21 20:25:54 -05:00
if (this.pubClient) {
2015-04-14 11:01:11 -04:00
this.pubClient.publish(channelName, JSON.stringify({event: event, data: data}));
2014-12-21 20:25:54 -05:00
} else {
this.emit(event, data);
}
};
var pubsub = new PubSub();
2017-02-18 02:30:48 -07:00
module.exports = pubsub;