1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const events = require("events");
|
4 | const Event_1 = require("./Event");
|
5 | const EventListener_1 = require("./EventListener");
|
6 | const promise_nodeify_1 = require("./promise-nodeify");
|
7 | var EventEmitter = events.EventEmitter, addListenerMethods = ["addListener", "on", "once"], copyMethods = ["removeListener", "removeAllListeners", "setMaxListeners", "listeners"];
|
8 | function parseEvent(event) {
|
9 | var tmp = event.split(":");
|
10 | return {
|
11 | exchange: tmp[0],
|
12 | topic: tmp[1]
|
13 | };
|
14 | }
|
15 | class AMQPEventEmitter {
|
16 | constructor(runtime) {
|
17 | this.runtime = runtime || "";
|
18 | this.ee = new EventEmitter();
|
19 | this.eventsListeners = {};
|
20 | addListenerMethods.forEach((method) => {
|
21 | this[method] = (options, cb, eventSetCb) => {
|
22 | if (typeof options === "string") {
|
23 | options = {
|
24 | event: options
|
25 | };
|
26 | }
|
27 | let event = options.event;
|
28 | if (["newListener", "removeListener"].indexOf(event) !== -1) {
|
29 | return this.ee[method].call(this.ee, event, cb);
|
30 | }
|
31 | this.ee[method].call(this.ee, event, cb);
|
32 | return this.preListen(options, (err) => {
|
33 | if (err) {
|
34 | this.ee.removeListener(event, cb);
|
35 | }
|
36 | if (eventSetCb) {
|
37 | eventSetCb(err);
|
38 | }
|
39 | });
|
40 | };
|
41 | });
|
42 | copyMethods.forEach((method) => {
|
43 | this[method] = (...args) => {
|
44 | this.ee[method].apply(this.ee, args);
|
45 | };
|
46 | });
|
47 | }
|
48 | preListen(options, cb) {
|
49 | var event = options.event;
|
50 | var eParsed = parseEvent(event);
|
51 | if (this.eventsListeners[event]) {
|
52 | return cb(null);
|
53 | }
|
54 | Object.assign(options, {
|
55 | exchange: eParsed.exchange,
|
56 | topic: eParsed.topic,
|
57 | runtime: this.runtime
|
58 | });
|
59 | var eventListener = new EventListener_1.EventListener(options);
|
60 | this.eventsListeners[event] = eventListener;
|
61 | let promise = eventListener.listen((message, extra) => {
|
62 | var content = message.content;
|
63 | if (Array.isArray(content) && content.length === 1 && content[0].context && content[0].message) {
|
64 | content = content[0];
|
65 | }
|
66 | this.ee.emit.call(this.ee, event, content, extra);
|
67 | });
|
68 | return promise_nodeify_1.promiseNodeify(promise, cb);
|
69 | }
|
70 | emit(event, data) {
|
71 | var eParsed = parseEvent(event);
|
72 | var amqpEvent = new Event_1.Event({
|
73 | exchange: eParsed.exchange,
|
74 | topic: eParsed.topic
|
75 | });
|
76 | amqpEvent.send(data);
|
77 | }
|
78 | ;
|
79 | addListener(event, listener, cb) { }
|
80 | ;
|
81 | on(event, listener, cb) { }
|
82 | ;
|
83 | once(event, listener, cb) { }
|
84 | ;
|
85 | removeListener(event, listener) { }
|
86 | ;
|
87 | removeAllListeners(event) { }
|
88 | ;
|
89 | setMaxListeners(n) { }
|
90 | ;
|
91 | listeners(event) { }
|
92 | ;
|
93 | }
|
94 | exports.AMQPEventEmitter = AMQPEventEmitter;
|
95 |
|
\ | No newline at end of file |