pubnub
Version:
Publish & Subscribe Real-time Messaging with PubNub
39 lines (31 loc) • 637 B
text/typescript
/**
* Event Engine terminate signal listener module.
*
* @internal
*/
type Listener<T> = (event: T) => void;
/**
* @internal
*/
export class Subject<T> {
protected listeners: Set<Listener<T>> = new Set();
constructor(private sync: boolean = false) {}
subscribe(listener: Listener<T>) {
this.listeners.add(listener);
return () => {
this.listeners.delete(listener);
};
}
notify(event: T) {
const wrapper = () => {
this.listeners.forEach((listener) => {
listener(event);
});
};
if (this.sync) {
wrapper();
} else {
setTimeout(wrapper, 0);
}
}
}