Check if callback exists

This commit is contained in:
Leonid Logvinov 2017-11-20 16:25:51 -06:00
parent b01a4af99e
commit 3bc3666215
No known key found for this signature in database
GPG Key ID: 0DD294BFDE8C95D4
2 changed files with 10 additions and 8 deletions

View File

@ -29,12 +29,12 @@ export class ExpirationWatcher {
const comparator = (lhs: string, rhs: string) => scoreFunction(lhs) - scoreFunction(rhs); const comparator = (lhs: string, rhs: string) => scoreFunction(lhs) - scoreFunction(rhs);
this.orderHashByExpirationRBTree = new RBTree(comparator); this.orderHashByExpirationRBTree = new RBTree(comparator);
} }
public subscribe(callback: (orderHash: string) => void): void { public subscribe(callbackAsync: (orderHash: string) => Promise<void>): void {
if (!_.isUndefined(this.orderExpirationCheckingIntervalIdIfExists)) { if (!_.isUndefined(this.orderExpirationCheckingIntervalIdIfExists)) {
throw new Error(ZeroExError.SubscriptionAlreadyPresent); throw new Error(ZeroExError.SubscriptionAlreadyPresent);
} }
this.orderExpirationCheckingIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval( this.orderExpirationCheckingIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
this.pruneExpiredOrders.bind(this, callback), this.orderExpirationCheckingIntervalMs, this.pruneExpiredOrdersAsync.bind(this, callbackAsync), this.orderExpirationCheckingIntervalMs,
); );
} }
public unsubscribe(): void { public unsubscribe(): void {
@ -52,7 +52,7 @@ export class ExpirationWatcher {
this.orderHashByExpirationRBTree.remove(orderHash); this.orderHashByExpirationRBTree.remove(orderHash);
delete this.expiration[orderHash]; delete this.expiration[orderHash];
} }
private pruneExpiredOrders(callback: (orderHash: string) => void): void { private async pruneExpiredOrdersAsync(callbackAsync: (orderHash: string) => Promise<void>): Promise<void> {
const currentUnixTimestampMs = utils.getCurrentUnixTimestampMs(); const currentUnixTimestampMs = utils.getCurrentUnixTimestampMs();
while ( while (
this.orderHashByExpirationRBTree.size !== 0 && this.orderHashByExpirationRBTree.size !== 0 &&
@ -63,7 +63,7 @@ export class ExpirationWatcher {
const orderHash = this.orderHashByExpirationRBTree.min(); const orderHash = this.orderHashByExpirationRBTree.min();
this.orderHashByExpirationRBTree.remove(orderHash); this.orderHashByExpirationRBTree.remove(orderHash);
delete this.expiration[orderHash]; delete this.expiration[orderHash];
callback(orderHash); await callbackAsync(orderHash);
} }
} }
} }

View File

@ -128,7 +128,7 @@ export class OrderStateWatcher {
} }
this._callbackIfExists = callback; this._callbackIfExists = callback;
this._eventWatcher.subscribe(this._onEventWatcherCallbackAsync.bind(this)); this._eventWatcher.subscribe(this._onEventWatcherCallbackAsync.bind(this));
this._expirationWatcher.subscribe(this._onOrderExpired.bind(this)); this._expirationWatcher.subscribe(this._onOrderExpiredAsync.bind(this));
} }
/** /**
* Ends an orderStateWatcher subscription. * Ends an orderStateWatcher subscription.
@ -143,7 +143,7 @@ export class OrderStateWatcher {
this._eventWatcher.unsubscribe(); this._eventWatcher.unsubscribe();
this._expirationWatcher.unsubscribe(); this._expirationWatcher.unsubscribe();
} }
private _onOrderExpired(orderHash: string): void { private async _onOrderExpiredAsync(orderHash: string): Promise<void> {
const orderState: OrderState = { const orderState: OrderState = {
isValid: false, isValid: false,
orderHash, orderHash,
@ -151,8 +151,10 @@ export class OrderStateWatcher {
}; };
if (!_.isUndefined(this._orderByOrderHash[orderHash])) { if (!_.isUndefined(this._orderByOrderHash[orderHash])) {
// We need this check because we never remove the orders from expiration watcher // We need this check because we never remove the orders from expiration watcher
this.removeOrder(orderHash); await this.removeOrderAsync(orderHash);
(this._callbackIfExistsAsync as OnOrderStateChangeCallback)(orderState); if (!_.isUndefined(this._callbackIfExists)) {
this._callbackIfExists(orderState);
}
} }
} }
private async _onEventWatcherCallbackAsync(log: LogEvent): Promise<void> { private async _onEventWatcherCallbackAsync(log: LogEvent): Promise<void> {