Pass callback down
This commit is contained in:
parent
d39c0bee39
commit
9745d5348c
@ -16,7 +16,6 @@ const DEFAULT_ORDER_EXPIRATION_CHECKING_INTERVAL_MS = 50;
|
|||||||
export class ExpirationWatcher {
|
export class ExpirationWatcher {
|
||||||
private orderHashRBTreeByExpiration: RBTree<string>;
|
private orderHashRBTreeByExpiration: RBTree<string>;
|
||||||
private expiration: {[orderHash: string]: BigNumber} = {};
|
private expiration: {[orderHash: string]: BigNumber} = {};
|
||||||
private callbackIfExists?: (orderHash: string) => void;
|
|
||||||
private orderExpirationCheckingIntervalMs: number;
|
private orderExpirationCheckingIntervalMs: number;
|
||||||
private expirationMarginMs: number;
|
private expirationMarginMs: number;
|
||||||
private orderExpirationCheckingIntervalIdIfExists?: NodeJS.Timer;
|
private orderExpirationCheckingIntervalIdIfExists?: NodeJS.Timer;
|
||||||
@ -31,12 +30,11 @@ export class ExpirationWatcher {
|
|||||||
this.orderHashRBTreeByExpiration = new RBTree(comparator);
|
this.orderHashRBTreeByExpiration = new RBTree(comparator);
|
||||||
}
|
}
|
||||||
public subscribe(callback: (orderHash: string) => void): void {
|
public subscribe(callback: (orderHash: string) => void): void {
|
||||||
if (!_.isUndefined(this.callbackIfExists)) {
|
if (!_.isUndefined(this.orderExpirationCheckingIntervalIdIfExists)) {
|
||||||
throw new Error(ZeroExError.SubscriptionAlreadyPresent);
|
throw new Error(ZeroExError.SubscriptionAlreadyPresent);
|
||||||
}
|
}
|
||||||
this.callbackIfExists = callback;
|
|
||||||
this.orderExpirationCheckingIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
this.orderExpirationCheckingIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
||||||
this.pruneExpiredOrders.bind(this), this.orderExpirationCheckingIntervalMs,
|
this.pruneExpiredOrders.bind(this, callback), this.orderExpirationCheckingIntervalMs,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public unsubscribe(): void {
|
public unsubscribe(): void {
|
||||||
@ -44,7 +42,6 @@ export class ExpirationWatcher {
|
|||||||
throw new Error(ZeroExError.SubscriptionNotFound);
|
throw new Error(ZeroExError.SubscriptionNotFound);
|
||||||
}
|
}
|
||||||
intervalUtils.clearAsyncExcludingInterval(this.orderExpirationCheckingIntervalIdIfExists);
|
intervalUtils.clearAsyncExcludingInterval(this.orderExpirationCheckingIntervalIdIfExists);
|
||||||
delete this.callbackIfExists;
|
|
||||||
delete this.orderExpirationCheckingIntervalIdIfExists;
|
delete this.orderExpirationCheckingIntervalIdIfExists;
|
||||||
}
|
}
|
||||||
public addOrder(orderHash: string, expirationUnixTimestampMs: BigNumber): void {
|
public addOrder(orderHash: string, expirationUnixTimestampMs: BigNumber): void {
|
||||||
@ -55,19 +52,18 @@ export class ExpirationWatcher {
|
|||||||
this.orderHashRBTreeByExpiration.remove(orderHash);
|
this.orderHashRBTreeByExpiration.remove(orderHash);
|
||||||
delete this.expiration[orderHash];
|
delete this.expiration[orderHash];
|
||||||
}
|
}
|
||||||
private pruneExpiredOrders(): void {
|
private pruneExpiredOrders(callback: (orderHash: string) => void): void {
|
||||||
const currentUnixTimestampMs = utils.getCurrentUnixTimestampMs();
|
const currentUnixTimestampMs = utils.getCurrentUnixTimestampMs();
|
||||||
while (
|
while (
|
||||||
this.orderHashRBTreeByExpiration.size !== 0 &&
|
this.orderHashRBTreeByExpiration.size !== 0 &&
|
||||||
this.expiration[this.orderHashRBTreeByExpiration.min()].lessThan(
|
this.expiration[this.orderHashRBTreeByExpiration.min()].lessThan(
|
||||||
currentUnixTimestampMs.plus(this.expirationMarginMs),
|
currentUnixTimestampMs.plus(this.expirationMarginMs),
|
||||||
) &&
|
)
|
||||||
!_.isUndefined(this.callbackIfExists)
|
|
||||||
) {
|
) {
|
||||||
const orderHash = this.orderHashRBTreeByExpiration.min();
|
const orderHash = this.orderHashRBTreeByExpiration.min();
|
||||||
this.orderHashRBTreeByExpiration.remove(orderHash);
|
this.orderHashRBTreeByExpiration.remove(orderHash);
|
||||||
delete this.expiration[orderHash];
|
delete this.expiration[orderHash];
|
||||||
this.callbackIfExists(orderHash);
|
callback(orderHash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user