private void ProcessMarketDataFinished(MarketDataFinishedMessage message) { var info = _seriesInfosByTransactions.TryGetValue(message.OriginalTransactionId); if (info == null) { RaiseNewOutMessage(message); return; } if (message.IsHistory) { if (!info.MarketDataMessage.IsHistory) { return; } RemoveSeriesInfo(info); RaiseNewOutMessage(new MarketDataFinishedMessage { OriginalTransactionId = info.MarketDataMessage.TransactionId, IsHistory = true }); return; } _seriesInfosByTransactions.Remove(message.OriginalTransactionId); switch (info.DataType) { case MarketDataTypes.Level1: case MarketDataTypes.MarketDepth: case MarketDataTypes.Trades: { SendMarketDataFinished(info); break; } case MarketDataTypes.CandleTimeFrame: case MarketDataTypes.CandleTick: case MarketDataTypes.CandleVolume: case MarketDataTypes.CandleRange: case MarketDataTypes.CandlePnF: case MarketDataTypes.CandleRenko: { if (info.MarketDataMessage.BuildCandlesMode != BuildCandlesModes.LoadAndBuild) { SendMarketDataFinished(info); } else { Subscribe(info, true); } break; } } }
private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message, Subscription subscription) { this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message); MarketDataSubscriptionFinished?.Invoke(security, message); if (subscription != null) { RaiseSubscriptionStopped(subscription, null); } }
private void SendMarketDataFinished(SeriesInfo info) { RemoveSeriesInfo(info); var msg = new MarketDataFinishedMessage { OriginalTransactionId = info.MarketDataMessage.TransactionId }; RaiseNewOutMessage(msg); }
public Subscription ProcessMarketDataFinishedMessage(MarketDataFinishedMessage message) { var subscription = TryGetSubscription(message.OriginalTransactionId, true); if (subscription != null) { ChangeState(subscription, SubscriptionStates.Finished); } return(subscription); }
private void RaiseMarketDataSubscriptionFinished(MarketDataFinishedMessage message, Subscription subscription) { if (message == null) { throw new ArgumentNullException(nameof(message)); } if (subscription == null) { throw new ArgumentNullException(nameof(subscription)); } var security = subscription.Security; this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message); MarketDataSubscriptionFinished?.Invoke(security, message); RaiseSubscriptionStopped(subscription, null); if (subscription.CandleSeries != null) { RaiseCandleSeriesStopped(subscription.CandleSeries); } }
private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message) { this.AddDebugLog("Market data finished: {0} {1}", security?.Id, message); MarketDataSubscriptionFinished?.Invoke(security, message); }
private void RaiseMarketDataSubscriptionFinished(Security security, MarketDataFinishedMessage message) { this.AddDebugLog(LocalizedStrings.SubscriptionFinished, security?.Id, message); MarketDataSubscriptionFinished?.Invoke(security, message); }
public Subscription ProcessMarketDataFinishedMessage(MarketDataFinishedMessage message) { return(TryGetSubscription(message.OriginalTransactionId, true)); }
/// <inheritdoc /> protected override void OnSendInMessage(Message message) { Message outMsg = null; switch (message.Type) { case MessageTypes.Reset: case MessageTypes.Disconnect: { lock (_syncObject) { _partialRequests.Clear(); _original.Clear(); _liveRequests.Clear(); } break; } case MessageTypes.OrderStatus: case MessageTypes.PortfolioLookup: { var subscriptionMsg = (ISubscriptionMessage)message; if (subscriptionMsg.IsSubscribe) { if (subscriptionMsg is OrderStatusMessage statusMsg && statusMsg.HasOrderId()) { break; } var from = subscriptionMsg.From; var to = subscriptionMsg.To; if (from != null || to != null) { var step = InnerAdapter.GetHistoryStepSize(DataType.Transactions, out _); // adapter do not provide historical request if (step == TimeSpan.Zero) { if (to != null) { // finishing current history request if (message.Type == MessageTypes.PortfolioLookup) { outMsg = message.Type.ToResultType().CreateLookupResult(subscriptionMsg.TransactionId); } message = null; } else { // or sending further only live subscription subscriptionMsg.From = null; subscriptionMsg.To = null; lock (_syncObject) _liveRequests.Add(subscriptionMsg.TransactionId, false); } } } else { lock (_syncObject) _liveRequests.Add(subscriptionMsg.TransactionId, false); } } break; } case MessageTypes.MarketData: { var mdMsg = (MarketDataMessage)message; var transId = mdMsg.TransactionId; if (mdMsg.IsSubscribe) { var from = mdMsg.From; var to = mdMsg.To; if (from != null || to != null) { var step = InnerAdapter.GetHistoryStepSize(mdMsg.ToDataType(), out var iterationInterval); // adapter do not provide historical request if (step == TimeSpan.Zero) { if (to != null) { // finishing current history request outMsg = new MarketDataFinishedMessage { OriginalTransactionId = transId }; message = null; break; } else { // or sending further only live subscription mdMsg.From = null; mdMsg.To = null; lock (_syncObject) _liveRequests.Add(transId, false); break; } } var info = new DownloadInfo(this, (MarketDataMessage)mdMsg.Clone(), step, iterationInterval); message = info.InitNext(); lock (_syncObject) { _original.Add(info.Origin.TransactionId, info); _partialRequests.Add(info.CurrTransId, info); } } else { lock (_syncObject) _liveRequests.Add(transId, false); } } else { lock (_syncObject) { if (!_original.TryGetValue(mdMsg.OriginalTransactionId, out var info)) { break; } info.UnsubscribingId = transId; message = null; } } break; } case ExtendedMessageTypes.PartialDownload: { var partialMsg = (PartialDownloadMessage)message; lock (_syncObject) { if (!_original.TryGetValue(partialMsg.OriginalTransactionId, out var info)) { return; } if (info.UnsubscribingId != null) { outMsg = new MarketDataMessage { OriginalTransactionId = info.UnsubscribingId.Value }; message = null; break; } var mdMsg = info.InitNext(); if (mdMsg.To == null) { _liveRequests.Add(mdMsg.TransactionId, true); _original.Remove(partialMsg.OriginalTransactionId); _partialRequests.RemoveWhere(p => p.Value == info); } else { _partialRequests.Add(info.CurrTransId, info); } message = mdMsg; } break; } } if (message != null) { base.OnSendInMessage(message); } if (outMsg != null) { RaiseNewOutMessage(outMsg); } }