UNPKG

redis-smq-common

Version:

RedisSMQ Common Library provides many components that are mainly used by RedisSMQ and RedisSMQ Monitor.

138 lines 4.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventBusRedis = void 0; const index_js_1 = require("../async/index.js"); const index_js_2 = require("../event/index.js"); const index_js_3 = require("../redis-client/index.js"); const index_js_4 = require("./errors/index.js"); class EventBusRedis extends index_js_2.EventEmitter { constructor(pubClient, subClient) { super(); this.connected = false; this.pubClient = pubClient; this.pubClient.on('error', (err) => { this.eventEmitter.emit('error', err); }); this.subClient = subClient; this.subClient.on('message', (channel, message) => { this.eventEmitter.emit(String(channel), ...JSON.parse(message)); }); this.subClient.on('error', (err) => { this.eventEmitter.emit('error', err); }); this.connected = true; } emit(event, ...args) { if (!this.connected) { this.eventEmitter.emit('error', new index_js_4.EventBusNotConnectedError()); return false; } this.pubClient.publish(String(event), JSON.stringify(args), () => void 0); return true; } on(event, listener) { if (event === 'error') { super.on('error', listener); return this; } if (!this.connected) { this.eventEmitter.emit('error', new index_js_4.EventBusNotConnectedError()); return this; } this.subClient.subscribe(String(event)); super.on(event, listener); return this; } once(event, listener) { if (event === 'error') { super.once('error', listener); return this; } if (!this.connected) { this.eventEmitter.emit('error', new index_js_4.EventBusNotConnectedError()); return this; } this.subClient.subscribe(String(event)); super.once(event, listener); return this; } removeAllListeners(event) { if (event === 'error') { super.removeAllListeners('error'); return this; } if (!this.connected) { this.eventEmitter.emit('error', new index_js_4.EventBusNotConnectedError()); return this; } if (event) this.subClient.unsubscribe(String(event)); else this.subClient.unsubscribe(); super.removeAllListeners(event); return this; } removeListener(event, listener) { if (event === 'error') { super.removeListener('error', listener); return this; } if (!this.connected) { this.eventEmitter.emit('error', new index_js_4.EventBusNotConnectedError()); return this; } super.removeListener(event, listener); return this; } shutdown(cb) { if (this.connected) { index_js_1.async.series([ (cb) => this.subClient.halt(() => cb()), (cb) => this.pubClient.halt(() => cb()), ], () => { this.connected = false; cb(); }); } else cb(); } static createInstance(config, cb) { let pubClient = null; let subClient = null; index_js_1.async.series([ (cb) => (0, index_js_3.createRedisClient)(config, (err, client) => { if (err) cb(err); else { pubClient = client; cb(); } }), (cb) => (0, index_js_3.createRedisClient)(config, (err, client) => { if (err) cb(err); else { subClient = client; cb(); } }), ], (err) => { if (err) { if (pubClient) pubClient.halt(() => void 0); if (subClient) subClient.halt(() => void 0); cb(err); } else if (!pubClient || !subClient) cb(new Error()); else { const instance = new EventBusRedis(pubClient, subClient); cb(null, instance); } }); } } exports.EventBusRedis = EventBusRedis; //# sourceMappingURL=event-bus-redis.js.map