-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPublishSubscribeService.ts
More file actions
32 lines (27 loc) · 965 Bytes
/
PublishSubscribeService.ts
File metadata and controls
32 lines (27 loc) · 965 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { BaseEvent } from "./Event";
import { Subscriber } from "./Subscriber";
export class PublishSubscribeService {
private subscribers: { machineId: string; subscriber: Subscriber }[] = [];
publish(event: BaseEvent): void {
for (let i = 0; i < this.subscribers.length; i++) {
if (this.subscribers[i].machineId === event.machineId) {
this.subscribers[i].subscriber.handle(event);
}
}
}
subscribe(subscriber: Subscriber): void {
this.subscribers[this.subscribers.length] = {
machineId: subscriber.machine.id,
subscriber: subscriber,
};
}
unsubscribe(machineId: string): void {
const newSubscribers: { machineId: string; subscriber: Subscriber }[] = [];
for (let i = 0; i < this.subscribers.length; i++) {
if (this.subscribers[i].machineId !== machineId) {
newSubscribers[newSubscribers.length] = this.subscribers[i];
}
}
this.subscribers = newSubscribers;
}
}