public WaitForMarketConnectedOperation(IConnection connection, CancellationToken cancellationToken) { Contract.Requires(connection != null); Contract.Requires(!cancellationToken.IsCancellationRequested); this.cancellationToken = cancellationToken; this.cancellationToken.Register(() => { this.subscriptions.Unsubscribe(); this.taskCompletionSource.TrySetCanceled(); }); this.subscriptions = new List<IDisposable> { connection.SubscribeForErrors(error => error.Code.IsConnected(), this.OnMarketConnected), connection.SubscribeForErrors(error => error.Code.IsGeneralError(), this.OnMarketNotConnected) }; }
public PlaceOrderOperation(RequestPlaceOrderMessage requestPlaceOrderMessage, IConnection connection, IOrdersStorageInternal ordersStorage, CancellationToken cancellationToken) { Contract.Requires(connection != null); Contract.Requires(ordersStorage != null); this.orderId = requestPlaceOrderMessage.OrderId; this.ordersStorage = ordersStorage; this.ordersStorage.OrderAdded += this.OnOrderAdded; cancellationToken.Register(() => { this.Unsubscribe(); this.taskCompletionSource.TrySetCanceled(); }); this.subscription = connection.SubscribeForErrors(error => error.RequestId == this.orderId, this.OnError); connection.SendMessage(requestPlaceOrderMessage); }