UNPKG

background-process-js

Version:
43 lines (42 loc) 1.61 kB
"use strict"; 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;