moahmedwafy commited on
Commit
8a85206
·
1 Parent(s): cf14b0a

feat: create event emitter class

Browse files
Files changed (1) hide show
  1. src/lib/events/events-manager.ts +66 -0
src/lib/events/events-manager.ts ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import EventEmitter from 'node:events';
2
+
3
+ /**
4
+ * EventsManager is a singleton class that manages events.
5
+ * It uses the EventEmitter class from Node.js to handle events.
6
+ */
7
+ export class EventsManager {
8
+ private static instance: EventsManager;
9
+ private emitter: EventEmitter;
10
+
11
+ private constructor() {
12
+ this.emitter = new EventEmitter();
13
+ }
14
+
15
+ private static getInstance(): EventsManager {
16
+ if (!EventsManager.instance) {
17
+ EventsManager.instance = new EventsManager();
18
+ }
19
+
20
+ return EventsManager.instance;
21
+ }
22
+
23
+ /**
24
+ * Register an event listener.
25
+ * @param event The event name.
26
+ * @param listener The listener function.
27
+ */
28
+ public on(event: string, listener: (...args: any[]) => void): void {
29
+ this.emitter.on(event, listener);
30
+ }
31
+
32
+ /**
33
+ * Remove an event listener.
34
+ * @param event The event name.
35
+ * @param listener The listener function.
36
+ */
37
+ public emit(event: string, ...args: any[]): void {
38
+ this.emitter.emit(event, ...args);
39
+ }
40
+
41
+ /**
42
+ * Create a queue to store events.
43
+ * @returns An EventsQueue object.
44
+ */
45
+ public createQueue() {
46
+ return new class EventsQueue {
47
+ private queue: any[] = [];
48
+
49
+ public add(event: string, ...args: any[]): void {
50
+ this.queue.push({ event, args });
51
+ }
52
+
53
+ public clear() {
54
+ this.queue = [];
55
+ }
56
+
57
+ public process() {
58
+ this.queue.forEach((item) => {
59
+ EventsManager.getInstance().emit(item.event, ...item.args);
60
+ });
61
+
62
+ this.clear();
63
+ }
64
+ }
65
+ }
66
+ }