this.addons_list_ = null;
this.addons_ = null;
this.evt_emitter_ = null;
+ this.addons_listeners = {};
}
registerAPIModule() {
}
initEventListener() {
+ const getSafeFunction = function(fn) {
+ return function() {
+ try {
+ fn.apply(this, arguments);
+ } catch (err) {
+ console.log(`Exception from add-on: ${err.name} - ${err.message}`);
+ }
+ }
+ }
this.evt_emitter_ = new EventEmitter();
this.wrappedEventEmitter = {
on: (eventName, listener) => {
- if (EventList.indexOf(eventName) !== -1) {
+ if (EventList.indexOf(eventName) === -1) {
+ console.log(`Invalid Event: ${eventName}`);
+ } else if (!this.addons_listeners[listener]) {
console.log(`A new listener for ${eventName} is added`);
- this.evt_emitter_.on(eventName, listener);
- } else console.log(`Invalid Event: ${eventName}`);
+ this.addons_listeners[listener] = getSafeFunction(listener);
+ this.evt_emitter_.on(eventName, this.addons_listeners[listener]);
+ } else console.log('Listener is already registered');
},
off: (eventName, listener) => {
- if (EventList.indexOf(eventName) !== -1) {
+ if (EventList.indexOf(eventName) === -1) {
+ console.log(`Invalid Event: ${eventName}`);
+ } else if (this.addons_listeners[listener]) {
console.log(`A listener for ${eventName} is removed`);
- this.evt_emitter_.off(eventName, listener);
- } else console.log(`Invalid Event: ${eventName}`);
+ this.evt_emitter_.off(eventName, this.addons_listeners[listener]);
+ delete this.addons_listeners[listener];
+ } else console.log('Listener is not registered');
}
}
}