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"); }
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(); } }
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]; }
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)); } } }