UNPKG

3.23 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const events = require("events");
4const Event_1 = require("./Event");
5const EventListener_1 = require("./EventListener");
6const promise_nodeify_1 = require("./promise-nodeify");
7var EventEmitter = events.EventEmitter, addListenerMethods = ["addListener", "on", "once"], copyMethods = ["removeListener", "removeAllListeners", "setMaxListeners", "listeners"];
8function parseEvent(event) {
9 var tmp = event.split(":");
10 return {
11 exchange: tmp[0],
12 topic: tmp[1]
13 };
14}
15class 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}
94exports.AMQPEventEmitter = AMQPEventEmitter;
95//# sourceMappingURL=EventEmitter.js.map
\No newline at end of file