public void Subscribe(IDataProvider provider, InstrumentList instruments) { if (provider.Status != ProviderStatus.Connected) { provider.Connect(); } var newInstruments = new InstrumentList(); for (int i = 0; i < instruments.Count; i++) { var instrument = instruments.GetByIndex(i); if (!this._submap.ContainsKey(provider.Id)) { this._submap[provider.Id] = new Dictionary <Instrument, int>(); } if (!this._submap[provider.Id].ContainsKey(instrument) || this._submap[provider.Id][instrument] == 0) { this._submap[provider.Id][instrument] = 0; newInstruments.Add(instrument); } this._submap[provider.Id][instrument] += 1; } if (newInstruments.Count > 0) { provider.Subscribe(newInstruments); } }
public void Unsubscribe(IDataProvider provider, InstrumentList instruments) { var list = new InstrumentList(); for (int i = 0; i < instruments.Count; i++) { var instrument = instruments.GetByIndex(i); if (this._submap.ContainsKey(provider.Id) && this._submap[provider.Id][instrument] != 0) { this._submap[provider.Id][instrument] -= 1; if (this._submap[provider.Id][instrument] == 0) { list.Add(instrument); } } else { Console.WriteLine($"SubscriptionManager::Unsubscribe Error. Instrument has no subscriptions {instrument.Symbol} on data provider {provider.Name}"); } } provider.Unsubscribe(list); }