public static List <IBaseNews> Parse(String strNews) { var lst = new List <IBaseNews>(); try { var msgs = strNews.Split(MessagesSeparator, StringSplitOptions.None); if (msgs.Count() == 0) { return(lst); } foreach (var msg in msgs) { if (msg.Contains("N:")) { // встретили новость var item = News.Parse(msg); if (item != null) { lst.Add(item); } } else if (msg.Contains("Q:")) { // встретили котировку var item = new TickerQuoteData(); item.Parse(msg); lst.Add(item); } else { throw new Exception("Неизвестный формат новостей"); } } return(lst); } catch (Exception ex) { // тут он не виден, надо что то придумать Logger.Error("BaseNewsParser.Parse: Возникла ошибка ", ex); } return(lst); }
public static IBaseNews ParseItem(string msg) { IBaseNews news = null; try { if (string.IsNullOrEmpty(msg)) { return(news); } if (msg.Contains("N:")) { // встретили новость news = News.Parse(msg); } else if (msg.Contains("Q:")) { // встретили котировку news = new TickerQuoteData(); try { ((TickerQuoteData)news).Parse(msg); } catch { Logger.ErrorFormat("Котировка не распознана ({0})", msg); news = null; } } else { throw new Exception("Неизвестный формат новости"); } return(news); } catch (Exception ex) { // тут он не виден, надо что то придумать logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogMsgParseError, 1000 * 60 * 10, "Не удалось разобрать сообщение BaseNews: {0}", msg); } return(news); }
private static void ReadNewsBlock(char[] buffer, int bytesRead, List <News> news, ref string tail) { // слепить строку с хвостом if (bytesRead == 0) { return; } var strBuf = new string(buffer, 0, bytesRead); var str = tail + strBuf; // смотрим - завершена ли строка разделителем? var indexSt = str.LastIndexOf(MessagesSeparator[0]); if (indexSt < 0) { tail = str; return; } var isTerminated = str.EndsWith(MessagesSeparator[0]); // прочитать все новости, оставшийся кусок новости записать в tail var parts = str.Split(MessagesSeparator, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 0) { tail = ""; return; } var lastIndex = isTerminated ? parts.Length - 1 : parts.Length - 2; for (var i = 0; i <= lastIndex; i++) { var ns = News.Parse(parts[i]); if (ns != null) { news.Add(ns); } } // сформировать хвост tail = isTerminated ? "" : parts[parts.Length - 1]; }