Пример #1
0
        public void LoadNews()
        {
            var dir = ExecutablePath.ExecPath + "\\News\\";

            if (!Directory.Exists(dir))
            {
                try
                {
                    Directory.CreateDirectory(dir);
                }
                catch (Exception)
                {
                    Logger.ErrorFormat("Ошибка создания директории News");
                    return;
                }
            }
            foreach (var fname in Directory.GetFiles(dir, "*.txt"))
            {
                Logger.Info("LoadNews(" + fname + ") ...");
                List <News> news = null;
                try
                {
                    news = BaseNewsParser.LoadNews(fname);
                }
                catch (Exception ex)
                {
                    Logger.Error("Ошибка в BaseNewsParser.LoadNews(" + fname + "): " + ex);
                    continue;
                }

                AddNews(news);
            }
            Logger.Info("LoadNews() ... OK");
        }
Пример #2
0
        public void SaveNews()
        {
            var dir = ExecutablePath.ExecPath + "\\News\\";

            try
            {
                lockNews.AcquireReaderLock(LockTimeout);
            }
            catch (ApplicationException)
            {
                Logger.ErrorFormat("Сохранение новостей - таймаут");
                return;
            }
            try
            {
                foreach (var pair in dicNews)
                {
                    var fileName = dir + pair.Key;
                    BaseNewsParser.StoreNews(fileName, pair.Value.ToArray());
                }
            }
            finally
            {
                lockNews.ReleaseReaderLock();
            }
        }
Пример #3
0
        private void OnTcpPacketReceived(string data)
        {
            lastMessageReceived.Touch();
            var str = tail + data;
            // смотрим - завершена ли строка разделителем?
            var indexSt = str.LastIndexOf(BaseNewsParser.MessagesSeparator[0]);

            if (indexSt < 0)
            {
                tail = str;
                return;
            }
            var isTerminated = str.EndsWith(BaseNewsParser.MessagesSeparator[0]);

            // прочитать все новости, оставшийся кусок новости записать в tail
            var parts = str.Split(BaseNewsParser.MessagesSeparator, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length == 0)
            {
                tail = String.Empty;
                return;
            }

            var lastIndex = isTerminated ? parts.Length - 1 : parts.Length - 2;

            // разбираем список на котировки и новости и складываем их
            var news   = new List <News>();
            var quotes = new List <TickerQuoteData>();

            for (var i = 0; i <= lastIndex; i++)
            {
                var item = BaseNewsParser.ParseItem(parts[i]);

                if (item != null)
                {
                    if (item is News)
                    {
                        news.Add((News)item);
                    }
                    else
                    if (item is TickerQuoteData)
                    {
                        quotes.Add((TickerQuoteData)item);
                    }
                }
            }
            AddNewsToDeliver(news);

            var quoteNames = quotes.Select(q => q.Ticker).ToArray();
            var quoteArray = quotes.ToArray();

            // обновить в хранилище котировок
            QuoteStorage.Instance.UpdateValues(quoteNames, quoteArray);

            AddTickersToDeliver(quotes);

            // сформировать хвост
            tail = isTerminated ? "" : parts[parts.Length - 1];
        }
Пример #4
0
 private void PollRoutine()
 {
     while (!isStopping)
     {
         Thread.Sleep(PollInterval);
         // запрашиваем новости
         bool timeoutFlag;
         var  news = newsQueue.ExtractAll(Timeout, out timeoutFlag);
         if (timeoutFlag)
         {
             Logger.DebugFormat("Таймаут {0} при попытке получить новости на раздачу", Timeout);
         }
         if (news == null || timeoutFlag)
         {
             continue;
         }
         if (news.Count > 0)
         {
             //Logger.InfoFormat("Доставка online {0} котировок", news.Count);
             distributor.DistributeStringData(BaseNewsParser.ToString(news));
         }
     }
 }