UNPKG

@allgemein/eventbus

Version:
102 lines 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NsqdReader = void 0; const nsqjs = require("nsqjs"); const events_1 = require("events"); const logging_1 = require("@allgemein/logging"); const Constants_1 = require("./Constants"); const Serializer_1 = require("../../utils/Serializer"); class NsqdReader extends events_1.EventEmitter { constructor(topic, channel, options) { super(); this.inc = 0; this.ready = false; this.topic = topic; this.channel = channel; this.options = options; } async initialize() { await this.open(); return null; } isOpened() { return this.ready; } open() { return new Promise((resolve, reject) => { try { this.reader = new nsqjs.Reader(this.topic, this.channel, this.options); const binding = (err) => { reject(err); }; this.reader.once(Constants_1.ERROR, binding); this.reader.once(Constants_1.CONNECTION_ERROR, binding); this.reader.once(Constants_1.READY, () => { this.reader.removeListener(nsqjs.Reader.ERROR, binding); this.reader.removeListener(Constants_1.CONNECTION_ERROR, binding); this.reader.on(Constants_1.MESSAGE, this.onMessage.bind(this)); this.reader.on(Constants_1.DISCARD, this.onDiscard.bind(this)); this.reader.on(Constants_1.ERROR, this.onError.bind(this)); resolve(this.reader); }); this.reader.connect(); } catch (err) { reject(err); } }); } close() { this.ready = false; const self = this; return new Promise((resolve, reject) => { self.reader.once(Constants_1.NSQD_CLOSED, () => { resolve(null); }); self.reader.once(Constants_1.ERROR, (err) => { reject(err); }); self.reader.close(); }); } onMessage(message) { try { this.inc++; const tm_str = message.timestamp.toString(); const timestamp = parseInt(message.timestamp.toString().substr(0, tm_str.length - 6), 0); const timestamp_sub = parseInt(message.timestamp.toString().substr((tm_str.length - 6)), 0); // @ts-ignore // @ts-ignore const data = { id: message.id, body: Serializer_1.Serializer.deserialize(message.body.toString()), // body: message.body.toString(), timestamp: timestamp, timestamp_sub: timestamp_sub, // @ts-ignore receivedOn: message['receivedOn'], // @ts-ignore lastTouched: message['lastTouched'], // @ts-ignore touchCount: message['touchCount'], topic: null, message: null }; this.emit('message', data); // message.touch(); message.finish(); } catch (err) { logging_1.Logger.error(err.message); // TODO Throw error! } } onDiscard(message) { this.emit('discard', message); } onError(err) { logging_1.Logger.error(err.message); } } exports.NsqdReader = NsqdReader; //# sourceMappingURL=NsqdReader.js.map