예제 #1
0
        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(); }
        }
예제 #2
0
        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);
        }