private void SendMarketDataRequest(Instrument instrument, bool subscribe, bool trades, bool quotes)
        {
            Dictionary <Instrument, MarketDataRecord> obj;

            if (subscribe)
            {
                lock (this.mdRecords)
                {
                    MarketDataRecord marketDataRecord;
                    if (!this.mdRecords.TryGetValue(instrument, out marketDataRecord))
                    {
                        marketDataRecord = new MarketDataRecord(instrument);
                        this.mdRecords.Add(instrument, marketDataRecord);
                    }
                    if (trades)
                    {
                        marketDataRecord.Trades = true;
                    }
                    if (quotes)
                    {
                        marketDataRecord.Quotes = true;
                    }
                    return;
                }
            }
            lock (this.mdRecords)
            {
                MarketDataRecord marketDataRecord2;
                if (this.mdRecords.TryGetValue(instrument, out marketDataRecord2))
                {
                    if (trades)
                    {
                        marketDataRecord2.Trades = false;
                    }
                    if (quotes)
                    {
                        marketDataRecord2.Quotes = false;
                    }
                    if (!marketDataRecord2.Trades && !marketDataRecord2.Quotes)
                    {
                        this.mdRecords.Remove(instrument);
                    }
                }
            }
        }
 private void method_5(object state)
 {
     ((ManualResetEvent)state).Set();
     while (this.doWork)
     {
         var list = new List <MarketDataRecord>();
         lock (this.mdRecords)
             list.AddRange(this.mdRecords.Values.Select(r => new MarketDataRecord(r.Instrument)
             {
                 Trades = r.Trades, Quotes = r.Quotes
             }));
         var    random = new Random();
         double min    = PriceRange.Min;
         double max    = PriceRange.Max;
         double min2   = SpreadRange.Min;
         double max2   = SpreadRange.Max;
         int    min3   = SizeRange.Min;
         int    max3   = SizeRange.Max;
         while (list.Count > 0)
         {
             int index = RandomizeInstruments ? random.Next(0, list.Count - 1) : 0;
             MarketDataRecord marketDataRecord = list[index];
             list.RemoveAt(index);
             if (marketDataRecord.Trades)
             {
                 double price = Math.Round(random.NextDouble() * (max - min) + min, DecimalDigits);
                 var    trade = new Trade(this.framework.Clock.DateTime, base.Id, marketDataRecord.Instrument.Id, price, random.Next(min3, max3));
                 EmitData(trade, true);
             }
             if (marketDataRecord.Quotes)
             {
                 double num    = Math.Round(random.NextDouble() * (max - min) + min, DecimalDigits);
                 double price2 = num + Math.Round(random.NextDouble() * (max2 - min2) + min2, DecimalDigits);
                 var    bid    = new Bid(this.framework.Clock.DateTime, Id, marketDataRecord.Instrument.Id, num, random.Next(min3, max3));
                 var    ask    = new Ask(this.framework.Clock.DateTime, Id, marketDataRecord.Instrument.Id, price2, random.Next(min3, max3));
                 EmitData(bid, true);
                 EmitData(ask, true);
             }
         }
         Thread.Sleep(this.Delay);
     }
 }