@allgemein/eventbus
Version:
102 lines • 3.58 kB
JavaScript
"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