public void ListenerThread() { WebClient client = new WebClient(); client.Encoding = System.Text.Encoding.ASCII; // open stream and reader string req = string.Format(Realtime_Template, new object[] { LoginId }); Stream stream = client.OpenRead(req); StreamReader reader = new StreamReader(stream); // debug if (LogEnable) { DebugLog += req + "\r\n"; } try { while (true) { string rep = reader.ReadLine(); bool parsed = false; // debug if (LogEnable) { DebugLog += rep + "\r\n"; } Tick t = ParseTick(rep); if (t != null && t.Type != TickType.TimeStamp) { tick_list[t.Stock] = t; parsed = true; } Minibook m = ParseMinibook(rep); if (m != null && m.Items.Count > 0) { minibook_list[m.Stock] = m; parsed = true; } // send signal if parsed if (parsed) { listen_event.Set(); } } } catch (Exception e) { if (LogEnable) { DebugLog += "(ListenerThread)" + e.Message + "\r\n"; } reader.Close(); stream.Close(); } }
public static Minibook ParseMinibook(string minibook) { CultureInfo ci = new CultureInfo("pt-BR", false); MinibookType mt = MinibookType.HistoryMinibook; if (minibook.StartsWith("HM")) { mt = MinibookType.HistoryMinibook; } else if (minibook.StartsWith("FM")) { mt = MinibookType.FullMinibook; } else if (minibook.StartsWith("CM")) { mt = MinibookType.CompactMinibook; } else { return(null); } minibook = minibook.Remove(0, 3); string[] cols = minibook.Split(';'); Minibook m = new Minibook(); m.Items = new List <MinibookItem>(); m.Type = mt; m.Stock = cols[0].Trim(); m.Status = cols[1].Trim(); for (int i = 2; i < cols.Length; i++) { string[] i1 = cols[i].Split('='); if (i1.Length != 2) { continue; } string order = i1[0]; string[] fields = i1[1].Substring(1, i1[1].Length - 2).Split(':'); MinibookItem mi = new MinibookItem(); mi.order = Convert.ToByte(order, ci); try { mi.BestAskPrice = Convert.ToSingle(fields[0].Trim(), ci); mi.NumberOfAsks = Convert.ToUInt32(fields[1].Trim(), ci); mi.TotalQuantityAsks = Convert.ToUInt64(fields[2].Trim(), ci); mi.BestBidPrice = Convert.ToSingle(fields[3].Trim(), ci); mi.NumberOfBids = Convert.ToUInt32(fields[4].Trim(), ci); mi.TotalQuantityBids = Convert.ToUInt64(fields[5].Trim(), ci); m.Items.Add(mi); } catch { }; } m.Items.Sort(delegate(MinibookItem m1, MinibookItem m2) { return(m1.order.CompareTo(m2.order)); }); return(m); }