public void ConsumerQuoteUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { lock (lockConsumersBySymbol) { if (this.DistributionChannels.ContainsKey(symbol) == false) { Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: symbol[" + symbol + "] is not registered for any consumers; returning"); return; } Dictionary<BarScaleInterval, SymbolScaleDistributionChannel> channels = this.DistributionChannels[symbol]; if (channels.ContainsKey(scaleInterval) == false) { string symbolDistributorsAsString = ""; foreach (SymbolScaleDistributionChannel d in channels.Values) symbolDistributorsAsString += d + ","; symbolDistributorsAsString.TrimEnd(','); Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: scaleInterval[" + scaleInterval + "] not found among distributors [" + symbolDistributorsAsString + "]; returning"); return; } SymbolScaleDistributionChannel channel = channels[scaleInterval]; if (channel.ConsumersQuoteContains(consumer) == false) { Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: consumer not found in [" + channel.ConsumersQuoteAsString + "]; returning"); return; } channel.ConsumersQuoteRemove(consumer); if (channel.ConsumersBarCount == 0 && channel.ConsumersQuoteCount == 0) { //Assembler.PopupException("QuoteConsumer [" + consumer + "] was the last one using [" + symbol + "][" + scaleInterval + "]; removing QuoteBarDistributor[" + channel + "]"); channels.Remove(scaleInterval); if (channels.Count == 0) { //Assembler.PopupException("QuoteConsumer [" + scaleInterval + "] was the last one listening for [" + symbol + "]"); //Assembler.PopupException("...removing[" + symbol + "] from this.DistributionChannels[" + this.DistributionChannels + "]"); this.DistributionChannels.Remove(symbol); //Assembler.PopupException("...UpstreamUnSubscribing [" + symbol + "]"); this.StreamingProvider.UpstreamUnSubscribe(symbol); } } } }
public void ConsumerQuoteRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { lock (lockConsumersBySymbol) { if (this.DistributionChannels.ContainsKey(symbol) == false) { SymbolScaleDistributionChannel newChannel = new SymbolScaleDistributionChannel(symbol, scaleInterval); newChannel.ConsumersQuoteAdd(consumer); Dictionary<BarScaleInterval, SymbolScaleDistributionChannel> newScaleChannels = new Dictionary<BarScaleInterval, SymbolScaleDistributionChannel>(); newScaleChannels.Add(scaleInterval, newChannel); this.DistributionChannels.Add(symbol, newScaleChannels); if (this.StreamingProvider.UpstreamIsSubscribed(symbol) == false) { this.StreamingProvider.UpstreamSubscribe(symbol); } return; } Dictionary<BarScaleInterval, SymbolScaleDistributionChannel> channels = this.DistributionChannels[symbol]; if (channels.ContainsKey(scaleInterval) == false) { SymbolScaleDistributionChannel newChannel = new SymbolScaleDistributionChannel(symbol, scaleInterval); newChannel.ConsumersQuoteAdd(consumer); channels.Add(scaleInterval, newChannel); return; } SymbolScaleDistributionChannel channel = channels[scaleInterval]; if (channel.ConsumersQuoteContains(consumer) == false) { channel.ConsumersQuoteAdd(consumer); return; } Assembler.PopupException("QuoteConsumer [" + consumer + "] already registered for [" + channel + "]; returning"); } }
public bool ConsumerQuoteIsRegistered(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { bool ret = false; Dictionary<string, List<BarScaleInterval>> symbolsScaleIntervals = SymbolsScaleIntervalsQuoteConsumerRegistered(consumer); if (symbolsScaleIntervals == null) return ret; ret = symbolsScaleIntervals.ContainsKey(symbol); return ret; }
public void ConsumersQuoteRemove(IStreamingConsumer consumer) { lock (lockConsumersQuote) { consumersQuote.Remove(consumer); if (earlyBinders.ContainsKey(consumer) && consumersBar.Contains(consumer) == false) { earlyBinders.Remove(consumer); } } }
public void ConsumersBarAdd(IStreamingConsumer consumer) { lock (lockConsumersBar) { consumersBar.Add(consumer); if (earlyBinders.ContainsKey(consumer) == false) { earlyBinders.Add(consumer, new StreamingEarlyBinder(this.StreamingBarFactoryUnattached, consumer)); } } }
public void ConsumersBarRemove(IStreamingConsumer consumer) { lock (lockConsumersBar) { if (consumer is StaticProvider) { int a = 1; } consumersBar.Remove(consumer); if (earlyBinders.ContainsKey(consumer) && consumersQuote.Contains(consumer) == false) { earlyBinders.Remove(consumer); } } }
public void ConsumerBarUnregisterDying(IStreamingConsumer dyingConsumer) { lock (lockConsumersBySymbol) { Dictionary <string, List <BarScaleInterval> > symbolsScaleIntervals = this.SymbolsScaleIntervalsBarConsumerRegistered(dyingConsumer); if (symbolsScaleIntervals == null) { Assembler.PopupException("BarConsumer [" + dyingConsumer + "] was not registered to any symbols + ScaleIntervals; returning"); return; } foreach (string symbol in symbolsScaleIntervals.Keys) { foreach (BarScaleInterval scaleInterval in symbolsScaleIntervals[symbol]) { this.ConsumerBarUnRegister(symbol, scaleInterval, dyingConsumer); } } } }
public bool ConsumersBarContains(IStreamingConsumer consumer) { lock (lockConsumersBar) { return consumersBar.Contains(consumer); } }
public StreamingEarlyBinder(StreamingBarFactoryUnattached streamingBarFactoryUnattached, IStreamingConsumer consumer) { this.streamingBarFactoryUnattached = streamingBarFactoryUnattached; this.consumer = consumer; }
public virtual bool ConsumerQuoteIsRegistered(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { return(this.DataDistributor.ConsumerQuoteIsRegistered(symbol, scaleInterval, consumer)); }
public bool ConsumersQuoteContains(IStreamingConsumer consumer) { lock (lockConsumersQuote) { return(consumersQuote.Contains(consumer)); } }
public void ConsumerQuoteRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { lock (lockConsumersBySymbol) { if (this.DistributionChannels.ContainsKey(symbol) == false) { SymbolScaleDistributionChannel newChannel = new SymbolScaleDistributionChannel(symbol, scaleInterval); newChannel.ConsumersQuoteAdd(consumer); Dictionary <BarScaleInterval, SymbolScaleDistributionChannel> newScaleChannels = new Dictionary <BarScaleInterval, SymbolScaleDistributionChannel>(); newScaleChannels.Add(scaleInterval, newChannel); this.DistributionChannels.Add(symbol, newScaleChannels); if (this.StreamingProvider.UpstreamIsSubscribed(symbol) == false) { this.StreamingProvider.UpstreamSubscribe(symbol); } return; } Dictionary <BarScaleInterval, SymbolScaleDistributionChannel> channels = this.DistributionChannels[symbol]; if (channels.ContainsKey(scaleInterval) == false) { SymbolScaleDistributionChannel newChannel = new SymbolScaleDistributionChannel(symbol, scaleInterval); newChannel.ConsumersQuoteAdd(consumer); channels.Add(scaleInterval, newChannel); return; } SymbolScaleDistributionChannel channel = channels[scaleInterval]; if (channel.ConsumersQuoteContains(consumer) == false) { channel.ConsumersQuoteAdd(consumer); return; } Assembler.PopupException("QuoteConsumer [" + consumer + "] already registered for [" + channel + "]; returning"); } }
// overridable proxy methods routed by default to DataDistributor public virtual void ConsumerBarRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer, Bar PartialBarInsteadOfEmpty) { this.ConsumerBarRegister(symbol, scaleInterval, consumer); SymbolScaleDistributionChannel channel = this.DataDistributor.GetDistributionChannelFor(symbol, scaleInterval); channel.StreamingBarFactoryUnattached.InitWithStreamingBarInsteadOfEmpty(PartialBarInsteadOfEmpty); }
public bool ConsumerBarIsRegistered(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { bool ret = false; Dictionary <string, List <BarScaleInterval> > symbolsScaleIntervals = SymbolsScaleIntervalsBarConsumerRegistered(consumer); if (symbolsScaleIntervals == null) { return(ret); } ret = symbolsScaleIntervals.ContainsKey(symbol); return(ret); }
public virtual void ConsumerBarUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { this.DataDistributor.ConsumerBarUnRegister(symbol, scaleInterval, consumer); }
public virtual void ConsumerQuoteUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer streamingConsumer) { this.DataDistributor.ConsumerQuoteUnRegister(symbol, scaleInterval, streamingConsumer); this.StreamingDataSnapshot.LastQuotePutNull(symbol); }
public Dictionary<string, List<BarScaleInterval>> SymbolsScaleIntervalsBarConsumerRegistered(IStreamingConsumer consumer) { Dictionary<string, List<BarScaleInterval>> ret = null; foreach (string symbol in this.DistributionChannels.Keys) { Dictionary<BarScaleInterval, SymbolScaleDistributionChannel> consumersByScaleInterval = DistributionChannels[symbol]; foreach (BarScaleInterval scaleInterval in consumersByScaleInterval.Keys) { SymbolScaleDistributionChannel consumers = consumersByScaleInterval[scaleInterval]; if (consumers.ConsumersBarContains(consumer)) { if (ret == null) ret = new Dictionary<string, List<BarScaleInterval>>(); if (ret.ContainsKey(symbol) == false) ret.Add(symbol, new List<BarScaleInterval>()); ret[symbol].Add(scaleInterval); } } } return ret; }
public StreamingConsumer(string symbol, IStreamingConsumer update, MarketInfo info) { this.Symbol = symbol; this.Consumer = update; this.MarketInfo = info; }
public virtual bool ConsumerQuoteIsRegistered(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { return this.DataDistributor.ConsumerQuoteIsRegistered(symbol, scaleInterval, consumer); }
public virtual void ConsumerBarRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { if (scaleInterval.Scale == BarScale.Unknown) { string msg = "Failed to ConsumerBarRegister(): scaleInterval.Scale=Unknown; returning"; Assembler.PopupException(msg); throw new Exception(msg); } this.DataDistributor.ConsumerBarRegister(symbol, scaleInterval, consumer); }
public void ConsumerBarUnregisterDying(IStreamingConsumer dyingConsumer) { lock (lockConsumersBySymbol) { Dictionary<string, List<BarScaleInterval>> symbolsScaleIntervals = this.SymbolsScaleIntervalsBarConsumerRegistered(dyingConsumer); if (symbolsScaleIntervals == null) { Assembler.PopupException("BarConsumer [" + dyingConsumer + "] was not registered to any symbols + ScaleIntervals; returning"); return; } foreach (string symbol in symbolsScaleIntervals.Keys) { foreach (BarScaleInterval scaleInterval in symbolsScaleIntervals[symbol]) { this.ConsumerBarUnRegister(symbol, scaleInterval, dyingConsumer); } } } }
public bool ConsumersBarContains(IStreamingConsumer consumer) { lock (lockConsumersBar) { return(consumersBar.Contains(consumer)); } }
public virtual void ConsumerUnregisterDead(IStreamingConsumer streamingConsumer) { this.DataDistributor.ConsumerBarUnregisterDying(streamingConsumer); this.DataDistributor.ConsumerQuoteUnregisterDying(streamingConsumer); }
public Dictionary <string, List <BarScaleInterval> > SymbolsScaleIntervalsBarConsumerRegistered(IStreamingConsumer consumer) { Dictionary <string, List <BarScaleInterval> > ret = null; foreach (string symbol in this.DistributionChannels.Keys) { Dictionary <BarScaleInterval, SymbolScaleDistributionChannel> consumersByScaleInterval = DistributionChannels[symbol]; foreach (BarScaleInterval scaleInterval in consumersByScaleInterval.Keys) { SymbolScaleDistributionChannel consumers = consumersByScaleInterval[scaleInterval]; if (consumers.ConsumersBarContains(consumer)) { if (ret == null) { ret = new Dictionary <string, List <BarScaleInterval> >(); } if (ret.ContainsKey(symbol) == false) { ret.Add(symbol, new List <BarScaleInterval>()); } ret[symbol].Add(scaleInterval); } } } return(ret); }
public void ConsumerQuoteUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) { lock (lockConsumersBySymbol) { if (this.DistributionChannels.ContainsKey(symbol) == false) { Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: symbol[" + symbol + "] is not registered for any consumers; returning"); return; } Dictionary <BarScaleInterval, SymbolScaleDistributionChannel> channels = this.DistributionChannels[symbol]; if (channels.ContainsKey(scaleInterval) == false) { string symbolDistributorsAsString = ""; foreach (SymbolScaleDistributionChannel d in channels.Values) { symbolDistributorsAsString += d + ","; } symbolDistributorsAsString.TrimEnd(','); Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: scaleInterval[" + scaleInterval + "] not found among distributors [" + symbolDistributorsAsString + "]; returning"); return; } SymbolScaleDistributionChannel channel = channels[scaleInterval]; if (channel.ConsumersQuoteContains(consumer) == false) { Assembler.PopupException("Can't unregister QuoteConsumer [" + consumer + "]: consumer not found in [" + channel.ConsumersQuoteAsString + "]; returning"); return; } channel.ConsumersQuoteRemove(consumer); if (channel.ConsumersBarCount == 0 && channel.ConsumersQuoteCount == 0) { //Assembler.PopupException("QuoteConsumer [" + consumer + "] was the last one using [" + symbol + "][" + scaleInterval + "]; removing QuoteBarDistributor[" + channel + "]"); channels.Remove(scaleInterval); if (channels.Count == 0) { //Assembler.PopupException("QuoteConsumer [" + scaleInterval + "] was the last one listening for [" + symbol + "]"); //Assembler.PopupException("...removing[" + symbol + "] from this.DistributionChannels[" + this.DistributionChannels + "]"); this.DistributionChannels.Remove(symbol); //Assembler.PopupException("...UpstreamUnSubscribing [" + symbol + "]"); this.StreamingProvider.UpstreamUnSubscribe(symbol); } } } }
public bool ConsumersQuoteContains(IStreamingConsumer consumer) { lock (lockConsumersQuote) { return consumersQuote.Contains(consumer); } }