2018-01-04 03:12:02 -06:00
|
|
|
import { EventEmitter } from 'eventemitter3';
|
2016-03-22 12:21:21 -05:00
|
|
|
|
|
|
|
export class Emitter {
|
2019-03-24 10:39:55 -05:00
|
|
|
private emitter: EventEmitter;
|
2016-03-22 12:21:21 -05:00
|
|
|
|
|
|
|
constructor() {
|
2016-04-07 18:47:48 -05:00
|
|
|
this.emitter = new EventEmitter();
|
2016-03-22 12:21:21 -05:00
|
|
|
}
|
|
|
|
|
2019-08-01 07:38:34 -05:00
|
|
|
emit(name: string, data?: any) {
|
2016-04-07 18:47:48 -05:00
|
|
|
this.emitter.emit(name, data);
|
2016-03-22 12:21:21 -05:00
|
|
|
}
|
|
|
|
|
2019-08-01 07:38:34 -05:00
|
|
|
on(name: string, handler: (payload?: any) => void, scope?: any) {
|
2016-04-07 18:47:48 -05:00
|
|
|
this.emitter.on(name, handler);
|
2016-03-25 09:35:58 -05:00
|
|
|
|
2016-03-25 09:52:28 -05:00
|
|
|
if (scope) {
|
2018-08-29 07:26:50 -05:00
|
|
|
const unbind = scope.$on('$destroy', () => {
|
2016-04-07 18:47:48 -05:00
|
|
|
this.emitter.off(name, handler);
|
2016-10-30 09:14:18 -05:00
|
|
|
unbind();
|
2016-03-25 09:35:58 -05:00
|
|
|
});
|
|
|
|
}
|
2016-03-22 12:21:21 -05:00
|
|
|
}
|
|
|
|
|
2019-08-01 07:38:34 -05:00
|
|
|
removeAllListeners(evt?: string) {
|
2016-10-30 09:14:18 -05:00
|
|
|
this.emitter.removeAllListeners(evt);
|
|
|
|
}
|
|
|
|
|
2019-08-01 07:38:34 -05:00
|
|
|
off(name: string, handler: (payload?: any) => void) {
|
2016-04-07 18:47:48 -05:00
|
|
|
this.emitter.off(name, handler);
|
2016-03-22 12:21:21 -05:00
|
|
|
}
|
2019-03-24 10:39:55 -05:00
|
|
|
|
|
|
|
getEventCount(): number {
|
|
|
|
return (this.emitter as any)._eventsCount;
|
|
|
|
}
|
2016-03-22 12:21:21 -05:00
|
|
|
}
|