@atomiqlabs/base
Version:
Base classes and interfaces for atomiq protocol
31 lines (22 loc) • 603 B
text/typescript
export class Lockable {
private lockedTill = 0;
private lockNonce = 0;
lock(timeoutSeconds: number): (() => boolean) | null {
if(this.isLocked()) {
return null;
}
this.lockedTill = Date.now()+(timeoutSeconds*1000);
this.lockNonce++;
const lockNonce = this.lockNonce;
return () => {
if(this.lockNonce!==lockNonce) {
return false;
}
this.lockedTill = 0;
return true;
};
}
isLocked(): boolean {
return this.lockedTill>Date.now();
}
}