background-process-js
Version:
A set of util tools for create background process.
43 lines (42 loc) • 1.61 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Consumer = exports.Events = void 0;
const node_events_1 = require("node:events");
var Events;
(function (Events) {
Events["STOP_REQUEST"] = "stop-request";
Events["START_REQUEST"] = "start-request";
Events["RECEIVED_MESSAGE"] = "received-message";
})(Events || (exports.Events = Events = {}));
class Consumer {
constructor(provider) {
this.provider = provider;
this.emitter = new node_events_1.EventEmitter();
}
process(pollingStrategy, hook) {
this.pollingStrategy = pollingStrategy;
this.emitter.on(Events.RECEIVED_MESSAGE, hook);
this.emitter.on(Events.START_REQUEST, async () => {
const incomingAllMessages = await this.pollingStrategy.exec(this.provider);
this.emitter.emit(Events.RECEIVED_MESSAGE, incomingAllMessages, this.finish.bind(this));
});
this.emitter.once(Events.STOP_REQUEST, () => {
this.emitter.removeAllListeners(Events.START_REQUEST);
this.emitter.removeAllListeners(Events.RECEIVED_MESSAGE);
});
}
stop() {
this.emitter.emit(Events.STOP_REQUEST);
}
start() {
this.emitter.emit(Events.START_REQUEST);
}
async finish(restartStrategy, messages) {
if (this.provider.hasDeadQueue() && messages.dead) {
await this.provider.markAsDeadMessages(messages.dead);
}
await this.provider.deleteMessages(messages.finished);
await restartStrategy.exec(this);
}
}
exports.Consumer = Consumer;
;