UNPKG

@methodus/server

Version:
91 lines 5.83 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const debug = require('debug')('tmla:methodus:mq'); require("reflect-metadata"); const fp_1 = require("../../fp"); const amqp_1 = require("./amqp"); const log_1 = require("../../log"); const domain = require("domain"); function registerHandlers(proto, options) { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => { let foundEvents = false; if (proto.methodus._events && Object.keys(proto.methodus._events).length > 0) { log_1.logger.log(this, 'registering events bus for:', Object.keys(proto.methodus._events)); var dom = domain.create(); foundEvents = true; dom.on('error', () => { registerHandlers(proto, options); }); dom.run(() => { amqp_1.AMQP.connect(options).then((conn) => { conn.createChannel().then((ch) => { let exchangeArr = fp_1.fp.unique(Object.keys(proto.methodus._events).map(event => proto.methodus._events[event].exchange)); if (exchangeArr.length === 0) { exchangeArr = ['event-bus']; } log_1.logger.log(this, exchangeArr); exchangeArr.forEach(exchange => { // let exchange = proto.methodus.exchange || 'event-bus'; ch.assertQueue('', { exclusive: true, durable: true }).then((q) => { Object.keys(proto.methodus._events).forEach(event => { ch.bindQueue(q.queue, exchange, proto.methodus._events[event].name); }); ch.consume(q.queue, (msg) => __awaiter(this, void 0, void 0, function* () { if (msg && msg.content) { log_1.logger.log(this, ' [x] %s', msg.content.toString()); log_1.logger.log(this, 'event message has arrived', msg.fields.routingKey); log_1.logger.log(this, 'msg string is', msg.content.toString()); //parse message try { let parsedMessage = fp_1.fp.maybeJson(msg.content.toString()); if (proto.methodus._events[parsedMessage.name]) { let pkey = proto.methodus._events[parsedMessage.name].propertyKey; if (proto[pkey]) { yield proto[pkey](parsedMessage.value, parsedMessage.name); //no results for an event } } else { //perform a wild card search Object.keys(proto.methodus._events).forEach((eventName) => __awaiter(this, void 0, void 0, function* () { let eventNameWithoutStar = eventName.replace(/\*/g, ''); if (parsedMessage.name.indexOf(eventNameWithoutStar) === 0) { let pkey = proto.methodus._events[eventName].propertyKey; if (proto[pkey]) { yield proto[pkey](parsedMessage.value, parsedMessage.name); } } })); } } catch (error) { log_1.logger.error(this, error); } } else { log_1.logger.error(this, `recieved empty message`); } }), { noAck: true }); resolve(); }); }); }); }); }); } if (!foundEvents) { resolve(); } }); }); } exports.registerHandlers = registerHandlers; //# sourceMappingURL=event-handler.js.map