Exemplo n.º 1
0
        public static void LoadInMemoryExchangeFeeds(List <Exchange> exchanges)
        {
            ExchangeFakeFeeds = new List <ExchangeFeeds>();

            foreach (Exchange exchange in exchanges)
            {
                ExchangeFeeds exchangeFeed = new ExchangeFeeds();
                exchangeFeed.ExchangeId         = Convert.ToInt32(exchange);
                exchangeFeed.ExchangeSymbolFeed = new List <SymbolFeeds>();

                if (ExchangeSymbolList.Count == 0)
                {
                    LoadInMemoryExchangeSymbols(exchanges);
                }

                foreach (Symbol symbol in ExchangeSymbolList.SingleOrDefault(x => x.Exchange == exchange).Symbols)
                {
                    SymbolFeeds symbolFeeds = new SymbolFeeds();
                    symbolFeeds.SymbolId = symbol.Id;
                    symbolFeeds.Feeds    = new List <Feed>();
                    exchangeFeed.ExchangeSymbolFeed.Add(symbolFeeds);
                }
                ExchangeFakeFeeds.Add(exchangeFeed);
            }
        }
        /// <summary>
        /// Method for generating fake data
        /// </summary>
        private void UpdateData()
        {
            // Method to change the values of all the stocks randomly in a fixed range
            List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == Exchange.FAKE_NASDAQ).Symbols;

            Feed[] feedsArray = new Feed[symbols.Count];

            List <SymbolFeeds> symbolFeeds = new List <SymbolFeeds>();

            while (true)
            {
                Thread.Sleep(updateDurationTime);

                Parallel.ForEach(symbols, (symbol) =>
                {
                    SymbolFeeds feeds = new SymbolFeeds();
                    feeds.SymbolId    = symbol.Id;

                    double changePercent = random.NextDouble() * (Constants.MAX_CHANGE_PERC - Constants.MIN_CHANGE_PERC) + Constants.MIN_CHANGE_PERC;

                    symbol.DefaultVal = symbol.DefaultVal + symbol.DefaultVal * changePercent / 100;
                    Feed feed         = new Feed();
                    feed.SymbolId     = symbol.Id;
                    feed.LTP          = symbol.DefaultVal;

                    feed.TimeStamp = Convert.ToInt64((DateTime.Now - epoch).TotalMilliseconds);

                    if (FeedArrived != null)
                    {
                        FeedArrived((Feed)feed.Clone());
                    }

                    //notify subscribers - later to be changed to only notify if there is any new data
                    Notify(symbol.Id, feed);
                });
            }
        }