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;
		}
Exemple #4
0
 public void ConsumersQuoteRemove(IStreamingConsumer consumer)
 {
     lock (lockConsumersQuote) {
         consumersQuote.Remove(consumer);
         if (earlyBinders.ContainsKey(consumer) && consumersBar.Contains(consumer) == false)
         {
             earlyBinders.Remove(consumer);
         }
     }
 }
Exemple #5
0
 public void ConsumersBarAdd(IStreamingConsumer consumer)
 {
     lock (lockConsumersBar) {
         consumersBar.Add(consumer);
         if (earlyBinders.ContainsKey(consumer) == false)
         {
             earlyBinders.Add(consumer, new StreamingEarlyBinder(this.StreamingBarFactoryUnattached, consumer));
         }
     }
 }
Exemple #6
0
 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);
         }
     }
 }
Exemple #7
0
 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 void ConsumersBarAdd(IStreamingConsumer consumer) {
			lock (lockConsumersBar) {
				consumersBar.Add(consumer);
				if (earlyBinders.ContainsKey(consumer) == false) {
					earlyBinders.Add(consumer, new StreamingEarlyBinder(this.StreamingBarFactoryUnattached, consumer));
				}
			}
		}
		public StreamingEarlyBinder(StreamingBarFactoryUnattached streamingBarFactoryUnattached, IStreamingConsumer consumer) {
			this.streamingBarFactoryUnattached = streamingBarFactoryUnattached;
			this.consumer = consumer;
		}
		public void ConsumersQuoteRemove(IStreamingConsumer consumer) {
			lock (lockConsumersQuote) {
				consumersQuote.Remove(consumer);
				if (earlyBinders.ContainsKey(consumer) && consumersBar.Contains(consumer) == false) {
					earlyBinders.Remove(consumer);
				}
			}
		}
 public virtual bool ConsumerQuoteIsRegistered(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer)
 {
     return(this.DataDistributor.ConsumerQuoteIsRegistered(symbol, scaleInterval, consumer));
 }
Exemple #13
0
 public bool ConsumersQuoteContains(IStreamingConsumer consumer)
 {
     lock (lockConsumersQuote) {
         return(consumersQuote.Contains(consumer));
     }
 }
Exemple #14
0
 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 StreamingEarlyBinder(StreamingBarFactoryUnattached streamingBarFactoryUnattached, IStreamingConsumer consumer)
 {
     this.streamingBarFactoryUnattached = streamingBarFactoryUnattached;
     this.consumer = consumer;
 }
Exemple #17
0
        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 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 virtual void ConsumerBarUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer) {
			this.DataDistributor.ConsumerBarUnRegister(symbol, scaleInterval, consumer);
		}
		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 virtual void ConsumerQuoteUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer streamingConsumer) {
			this.DataDistributor.ConsumerQuoteUnRegister(symbol, scaleInterval, streamingConsumer);
			this.StreamingDataSnapshot.LastQuotePutNull(symbol);
		}
Exemple #28
0
 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 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);
 }
Exemple #31
0
        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 virtual void ConsumerUnregisterDead(IStreamingConsumer streamingConsumer)
 {
     this.DataDistributor.ConsumerBarUnregisterDying(streamingConsumer);
     this.DataDistributor.ConsumerQuoteUnregisterDying(streamingConsumer);
 }
Exemple #33
0
 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);
			}
		}
 public StreamingConsumer(string symbol, IStreamingConsumer update, MarketInfo info)
 {
     this.Symbol     = symbol;
     this.Consumer   = update;
     this.MarketInfo = info;
 }
        // 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);
        }