mirror of
https://github.com/araxiaonline/wow-client-patcher.git
synced 2026-06-13 03:12:24 -04:00
Added custom event emitter
This commit is contained in:
39
src/main/libs/Emitter.ts
Normal file
39
src/main/libs/Emitter.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { EventEmitter } from 'events';
|
||||
|
||||
/**
|
||||
* Example Usage of custom emitter class
|
||||
*
|
||||
* type TestMap = {
|
||||
* start: { total: number },
|
||||
* end: { bytes: number },
|
||||
* data: {bytes: number, total: number, percentage: number, file: string }
|
||||
* };
|
||||
*
|
||||
* const testEmitter = new MyEmitter<TestMap>();
|
||||
* testEmitter.on('start', (params) => {
|
||||
* console.log('start', params);
|
||||
* });
|
||||
*/
|
||||
|
||||
type EventMap = Record<string, any>;
|
||||
type EventKey<T extends EventMap> = string & keyof T;
|
||||
type EventReceiver<T> = (params: T) => void;
|
||||
|
||||
export default class Emitter<T extends EventMap> {
|
||||
private emitter = new EventEmitter();
|
||||
|
||||
on<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>) {
|
||||
this.emitter.on(eventName, fn);
|
||||
}
|
||||
|
||||
off<K extends EventKey<T>>(eventName: K, fn: EventReceiver<T[K]>) {
|
||||
this.emitter.off(eventName, fn);
|
||||
}
|
||||
|
||||
emit<K extends EventKey<T>>(eventName: K, params: T[K]) {
|
||||
this.emitter.emit(eventName, params);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user