Последняя активность 1712112514

Jigsaw1601 ревизий этого фрагмента 1712112514. К ревизии

1 file changed, 37 insertions

eventbus.ts(файл создан)

@@ -0,0 +1,37 @@
1 +
2 + type Topics = {
3 + "event.post": EventPost1Data;
4 +
5 + };
6 +
7 + type Callbacks<T extends keyof Topics> = (data: Topics[T]) => void;
8 +
9 + class EventBus<T extends keyof Topics> {
10 + private subscribers: { [K in T]?: Callbacks<K>[] } = {};
11 +
12 + subscribe<K extends T>(topic: K, callback: Callbacks<K>): void {
13 + if (!this.subscribers[topic]) {
14 + this.subscribers[topic] = [];
15 + }
16 + this.subscribers[topic]?.push(callback);
17 + }
18 +
19 + unsubscribe<K extends T>(topic: K, callback: Callbacks<K>): void {
20 + const callbacks = this.subscribers[topic];
21 + if (callbacks) {
22 + this.subscribers[topic] = callbacks.filter(cb => cb !== callback);
23 + }
24 + }
25 +
26 + publish<K extends T>(topic: K, payload: Topics[K]): void {
27 + const callbacks = this.subscribers[topic];
28 + if (callbacks) {
29 + for (const callback of callbacks) {
30 + callback(payload);
31 + }
32 + }
33 + }
34 + }
35 +
36 + // Define topics and their corresponding payload types
37 + export const msgbus = new EventBus();
Новее Позже