@unilogin/sdk
Version:
SDK is a JS library, that communicates with relayer. SDK allows managing contract, by creating basic contract-calling messages.
25 lines (20 loc) • 597 B
text/typescript
import {State, Callback} from 'reactive-properties';
export abstract class ReferenceCountedState<T> extends State<T> {
private subscribersCount = 0;
abstract onFirstSubscribe(): void;
abstract onLastUnsubscribe(): void;
subscribe(callback: Callback): Callback {
const unsubscribe = super.subscribe(callback);
if (this.subscribersCount === 0) {
this.onFirstSubscribe();
}
this.subscribersCount++;
return () => {
this.subscribersCount--;
if (this.subscribersCount === 0) {
this.onLastUnsubscribe();
}
unsubscribe();
};
}
}