示例#1
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);
        }
示例#2
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");
     }
 }
		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");
			}
		}
示例#4
0
        // 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);
        }
示例#5
0
 public void ConsumerBarUnRegister(string symbol, BarScaleInterval scaleInterval, IStreamingConsumer consumer)
 {
     if (consumer is StaticProvider)
     {
         int a = 1;
     }
     lock (lockConsumersBySymbol) {
         if (this.DistributionChannels.ContainsKey(symbol) == false)
         {
             Assembler.PopupException("Can't unregister BarConsumer [" + consumer + "]: symbol[" + symbol + "] is not registered for any consumers; returning");
             return;
         }
         Dictionary <BarScaleInterval, SymbolScaleDistributionChannel> distributorsByScaleInterval = this.DistributionChannels[symbol];
         if (distributorsByScaleInterval.ContainsKey(scaleInterval) == false)
         {
             string symbolDistributorsAsString = "";
             foreach (SymbolScaleDistributionChannel d in distributorsByScaleInterval.Values)
             {
                 symbolDistributorsAsString += d + ",";
             }
             symbolDistributorsAsString.TrimEnd(',');
             Assembler.PopupException("Can't unregister BarConsumer [" + consumer + "]: scaleInterval[" + scaleInterval + "] not found among distributors [" + symbolDistributorsAsString + "]; returning");
             return;
         }
         SymbolScaleDistributionChannel distributor = distributorsByScaleInterval[scaleInterval];
         if (distributor.ConsumersBarContains(consumer) == false)
         {
             Assembler.PopupException("Can't unregister BarConsumer [" + consumer + "]: consumer not found in [" + distributor.ConsumersBarAsString + "]; returning");
             return;
         }
         distributor.ConsumersBarRemove(consumer);
         if (distributor.ConsumersBarCount == 0 && distributor.ConsumersQuoteCount == 0)
         {
             //Assembler.PopupException("BarConsumer [" + consumer + "] was the last one using [" + symbol + "][" + scaleInterval + "]; removing QuoteBarDistributor[" + distributor + "]");
             distributorsByScaleInterval.Remove(scaleInterval);
             if (distributorsByScaleInterval.Count == 0)
             {
                 //Assembler.PopupException("BarConsumer [" + 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);
             }
         }
     }
 }
示例#6
0
        public void InitializeStreamingOHLCVfromStreamingProvider(Bars chartBars)
        {
            SymbolScaleDistributionChannel distributionChannel = this.DataDistributor
                                                                 .GetDistributionChannelFor(chartBars.Symbol, chartBars.ScaleInterval);
            Bar streamingBar = distributionChannel.StreamingBarFactoryUnattached.StreamingBarUnattached;

            if (streamingBar == null)
            {
                string msg = "STREAMING_NEVER_STARTED BarFactory.StreamingBar=null for distributionChannel[" + distributionChannel + "]";
                Assembler.PopupException(msg);
                throw new Exception(msg);
            }
            if (streamingBar.DateTimeOpen == DateTime.MinValue)
            {
                string msg = "STREAMING_NEVER_STARTED streamingBar.DateTimeOpen=MinValue [" + streamingBar
                             + "] for distributionChannel[" + distributionChannel + "]";
                Assembler.PopupException(msg);
                throw new Exception(msg);
            }
            if (streamingBar.DateTimeOpen != chartBars.BarStaticLast.DateTimeNextBarOpenUnconditional)
            {
                if (streamingBar.DateTimeOpen == chartBars.BarStaticLast.DateTimeOpen)
                {
                    string msg = "STREAMINGBAR_OVERWROTE_LASTBAR streamingBar.DateTimeOpen[" + streamingBar.DateTimeOpen
                                 + "] == this.LastStaticBar.DateTimeOpen[" + chartBars.BarStaticLast.DateTimeOpen + "] " + chartBars;
                    //log.Error(msg);
                }
                else
                {
                    string msg = "STREAMINGBAR_OUTDATED streamingBar.DateTimeOpen[" + streamingBar.DateTimeOpen
                                 + "] != chartBars.LastStaticBar.DateTimeNextBarOpenUnconditional["
                                 + chartBars.BarStaticLast.DateTimeNextBarOpenUnconditional + "] " + chartBars;
                    //log.Error(msg);
                }
            }
            chartBars.OverrideStreamingDOHLCVwith(streamingBar);
            Assembler.PopupException("StreamingOHLCV Overwritten: Bars.StreamingBar[" + chartBars.BarStreamingCloneReadonly + "] taken from streamingBar[" + streamingBar + "]");
        }