public L1quotes TD_GetLevel1Quote2(string symbol, int nTimeOut) { byte[] bReplyValue = null; L1quotes oL1Quotes = new L1quotes(); Object oLockTD_GetLevel1Quote2 = new object(); string _streamerCommand = "S=QUOTE" + "&C=GET&P=" + symbol + "&T=0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40"; try { if (this.TD_loginStatus == true) { bReplyValue = new byte[65535]; XMLHTTP xmlHttp_ = new XMLHTTP(); StringBuilder cpostdata = new StringBuilder(); string lcPostUrl = string.Empty; cpostdata.Append("!U=" + _accountid); cpostdata.Append("&W=" + _token); cpostdata.Append("&A=userid=" + _accountid); cpostdata.Append("&token=" + _token); cpostdata.Append("&company=" + _company); cpostdata.Append("&segment=" + _segment); cpostdata.Append("&cddomain=" + _cdDomain); cpostdata.Append("&usergroup=" + _usergroup); cpostdata.Append("&accesslevel=" + _accesslevel); cpostdata.Append("&authorized=" + _authorized); cpostdata.Append("&acl=" + _acl); cpostdata.Append("×tamp=" + _timestamp); cpostdata.Append("&appid=" + _appid); cpostdata.Append("|" + _streamerCommand); string encodedString = Encode_URL(cpostdata.ToString()); cpostdata = new StringBuilder(); cpostdata.Append(encodedString); lcPostUrl = "http://" + this._streamerurl + "/" + cpostdata; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(lcPostUrl); req.ContentType = "application/x-www-form-urlencoded"; req.Accept = "Accept image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*"; req.Headers.Add("Accept-Encoding: deflate, gzip"); req.Method = "GET"; req.Timeout = (nTimeOut == 0 ? 5000 : nTimeOut); req.ReadWriteTimeout = (nTimeOut == 0 ? 5000 : nTimeOut); req.ServicePoint.ConnectionLimit = 50; HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); // Retrieve response stream Stream respStream = resp.GetResponseStream(); byte[] chunk = new byte[65535]; byte[] ChartByteArray = new byte[65535]; int bytesRead = respStream.Read(ChartByteArray, 0, ChartByteArray.Length); string compressedText = Convert.ToBase64String(ChartByteArray); byte[] gzBuffer = Convert.FromBase64String(compressedText); respStream.Flush(); resp.Close(); respStream.Close(); MemoryStream ms = new MemoryStream(); int nFieldNDX = 0; int nStartPos = 13; int msgLength = BitConverter.ToInt32(gzBuffer, 0); ms.Write(gzBuffer, 64, gzBuffer.Length - 64); byte[] nMsg = new byte[sizeof(Int32)]; ms.Close(); /*/ * S = Streaming * N = Snapshot /*/ nMsg[0] = gzBuffer[0]; string cRequestType = System.Text.Encoding.ASCII.GetString(nMsg, 0, 1); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[2]; nMsg[1] = gzBuffer[1]; int nNextFieldLength = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[5]; nMsg[1] = gzBuffer[4]; nMsg[2] = gzBuffer[3]; long nNextField = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[7]; nMsg[1] = gzBuffer[6]; int nMessageLength = BitConverter.ToInt32(nMsg, 0); /*/ * 1 = L1 Quote /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[9]; nMsg[1] = gzBuffer[8]; int nQuoteType = BitConverter.ToInt32(nMsg, 0); /*/ * Stock Symbol : Field 0 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[10]; int nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[12]; nMsg[1] = gzBuffer[11]; int nSymbolLength = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[nSymbolLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nSymbolLength); oL1Quotes.stock = TD_GetResponseValue(0, nMsg, 0, nSymbolLength); /*/ * Bid Price : Field 1 /*/ nFieldNDX = nStartPos + nSymbolLength; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Ask Price : Field 2 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Last Price : Field 3 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Bid Size : Field 4 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Ask Size : Field 5 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Bid ID : Field 6 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); /*/ * Ask ID : Field 7 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); /*/ * Volume : Field 8 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); /*/ * Last Size : Field 9 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Trade Time : Field 10 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Quote Time : Field 11 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * High : Field 12 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Low : Field 13 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Tick : Field 14 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quotes.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Close : Field 15 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Exchange : Field 16 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quotes.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Marginable : Field 17 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); /*/ * Shortable : Field 18 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); /*/ * ISLAND BID : Field 19 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND ASK : Field 20 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND ASK : Field 21 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); /*/ * QUOTE DATE : Field 22 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * QUOTE DATE : Field 23 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Volatility : Field 24 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Description : Field 25 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; int nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quotes.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength); /*/ * Trade ID : Field 26 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quotes.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Digits : Field 27 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Open : Field 28 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Change : Field 29 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * 52-Week High : Field 30 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * 52-Week Low : Field 31 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * PE-Ratio : Field 32 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Dividend Amount : Field 33 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Dividend Yield : Field 34 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND BID SIZE : Field 35 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * ISLAND ASK SIZE : Field 36 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * NAV : Field 37 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * FUND : Field 38 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quotes.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * EXCHANGE NAME : Field 39 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quotes.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength); /*/ * DIVIDEND DATE : Field 40 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quotes.dividend_date = TD_GetResponseValue(0, nMsg, 0, nStringlLength); GC.Collect(); } } catch (Exception exc) { } return oL1Quotes; }
public bool TD_IsStockSymbolValid(string symbol) { bool lStockSymbolFound = true; AmeritradeBrokerAPI.L1quotes oL1Quote = new L1quotes(); /*/ Make sure that the stock symbolis valid. /*/ try { oL1Quote = this.TD_GetLevel1Quote(symbol, 1000); } catch (Exception) { lStockSymbolFound = false; } lStockSymbolFound = (oL1Quote.stock == null || lStockSymbolFound == false ? false : true); return lStockSymbolFound; }
public void process_AsyncLevelOneSnapshot(IAsyncResult asyncResult) { // Get the RequestState object from the asyncresult RequestState rs = (RequestState)asyncResult.AsyncState; if (rs.lNewStockSymbol == true) { return; } try { if (rs.Request.ServicePoint.CurrentConnections > 0) { // Pull out the ResponseStream that was set in RespCallback Stream responseStream = rs.ResponseStream; // At this point rs.BufferRead should have some data in it. // Read will tell us if there is any data there int read = responseStream.EndRead(asyncResult); if (read > 0) { Array.Copy(rs.BufferRead, 0, ChartByteArray2, ChartByteArray2NDx, read); ChartByteArray2NDx = ChartByteArray2NDx + read; // Make another call so that we continue retrieving any all incoming data IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs); } else { // Close the response stream since we do not have any more incoming data. ChartByteArray2NDx = 0; // If we have not more bytes read, then the server has finished sending us data. if (read == 0) { List<L1quotes> oL1Quotes = new List<L1quotes>(); L1quotes oL1Quote = new L1quotes(); string compressedText = Convert.ToBase64String(ChartByteArray2); byte[] gzBuffer = Convert.FromBase64String(compressedText); MemoryStream ms = new MemoryStream(); int nFieldNDX = 0; int nStartPos = 13; int msgLength = BitConverter.ToInt32(gzBuffer, 0); ms.Write(gzBuffer, 64, gzBuffer.Length - 64); byte[] nMsg = new byte[sizeof(Int32)]; ms.Close(); /*/ * S = Streaming * N = Snapshot /*/ nMsg[0] = gzBuffer[0]; string cRequestType = System.Text.Encoding.ASCII.GetString(nMsg, 0, 1); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[2]; nMsg[1] = gzBuffer[1]; int nNextFieldLength = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[5]; nMsg[1] = gzBuffer[4]; nMsg[2] = gzBuffer[3]; long nNextField = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[7]; nMsg[1] = gzBuffer[6]; int nMessageLength = BitConverter.ToInt32(nMsg, 0); /*/ * 1 = L1 Quote /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[9]; nMsg[1] = gzBuffer[8]; int nQuoteType = BitConverter.ToInt32(nMsg, 0); /*/ * Stock Symbol : Field 0 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[10]; int nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[12]; nMsg[1] = gzBuffer[11]; int nSymbolLength = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[nSymbolLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nSymbolLength); oL1Quote.stock = rs.TD_GetResponseValue(0, nMsg, 0, nSymbolLength); /*/ * Bid Price : Field 1 /*/ nFieldNDX = nStartPos + nSymbolLength; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Ask Price : Field 2 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Last Price : Field 3 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Bid Size : Field 4 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Ask Size : Field 5 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Bid ID : Field 6 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); /*/ * Ask ID : Field 7 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); /*/ * Volume : Field 8 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); /*/ * Last Size : Field 9 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Trade Time : Field 10 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Quote Time : Field 11 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * High : Field 12 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Low : Field 13 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Tick : Field 14 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Close : Field 15 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Exchange : Field 16 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Marginable : Field 17 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); /*/ * Shortable : Field 18 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); /*/ * ISLAND BID : Field 19 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND ASK : Field 20 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND ASK : Field 21 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); /*/ * QUOTE DATE : Field 22 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * QUOTE DATE : Field 23 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Volatility : Field 24 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Description : Field 25 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; int nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength); /*/ * Trade ID : Field 26 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); /*/ * Digits : Field 27 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * Open : Field 28 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Change : Field 29 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * 52-Week High : Field 30 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * 52-Week Low : Field 31 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * PE-Ratio : Field 32 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Dividend Amount : Field 33 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * Dividend Yield : Field 34 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * ISLAND BID SIZE : Field 35 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * ISLAND ASK SIZE : Field 36 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); /*/ * NAV : Field 37 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * FUND : Field 38 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); /*/ * EXCHANGE NAME : Field 39 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength); /*/ * DIVIDEND DATE : Field 40 /*/ nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.dividend_date = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength); oL1Quotes.Add(oL1Quote); rs.SendLevelOneDataSnapshot(oL1Quotes, rs.stockSymbol); } } } } catch (Exception exc) { } }
public bool TD_IsShortableCustom(string symbol) { L1quotes oL1Quote = new L1quotes(); while (true) { oL1Quote = TD_GetLevel1Quote2(symbol.ToUpper(), 0); if (oL1Quote.shortable != null) { break; } } return Convert.ToBoolean(oL1Quote.shortable); }
public void process_AsyncLevelOneStreaming(IAsyncResult asyncResult) { // Get the RequestState object from the asyncresult RequestState rs = (RequestState)asyncResult.AsyncState; if (rs.lNewStockSymbol == true) { /*/ This tells use to return because the resources have been destroyed. /*/ rs.CloseStream(rs); return; } try { if (rs.Request.ServicePoint.CurrentConnections > 0) { // Pull out the ResponseStream that was set in RespCallback Stream responseStream = rs.ResponseStream; // At this point rs.BufferRead should have some data in it. // Read will tell us if there is any data there int read = responseStream.EndRead(asyncResult); if (read == 0) { rs.CloseStream(rs); responseStream.Close(); rs.oParent.TD_RequestAsyncLevel2Streaming(rs.stockSymbol, rs.Level2DataSourceType, rs.oParentForm); rs.oParent = null; return; } if (read > 0) { Array.Copy(rs.BufferRead, 0, ChartByteArray2, ChartByteArray2NDx, read); ChartByteArray2NDx = ChartByteArray2NDx + read; string compressedText1 = Convert.ToBase64String(ChartByteArray2); byte[] gzBuffer1 = Convert.FromBase64String(compressedText1); byte[] DataByteArray = new byte[read]; byte[] aTempStorage = new byte[read]; string mydata = string.Empty; int nStartPos1 = 0; bool lStartFound = false; int nEndPos1 = 0; bool lEndFound = false; int ntotalMessageChunkLength = 0; for (int nLoop = 0; nLoop < ChartByteArray2NDx; nLoop++) { /*/ * Find the start of the streaming message. /*/ if (gzBuffer1[nLoop] == 83 && lStartFound == false) { nStartPos1 = nLoop; lStartFound = true; } /*/ * Find the end of the streaming message. End of message delimeter = 255,10 /*/ if (gzBuffer1[nLoop] == 255 && gzBuffer1[nLoop + 1] == 10 && lEndFound == false && lStartFound == true) { byte[] nTotMsg = new byte[sizeof(short)]; nTotMsg[0] = gzBuffer1[nStartPos1 + 1]; nTotMsg[1] = gzBuffer1[nStartPos1 + 2]; Array.Reverse(nTotMsg); ntotalMessageChunkLength = BitConverter.ToInt16(nTotMsg, 0); nEndPos1 = nLoop; lEndFound = true; nStartPos1 = nStartPos1 + 5; //DataByteArray = new byte[(nEndPos1 - nStartPos1)]; DataByteArray = new byte[ntotalMessageChunkLength - 2]; Array.Copy(gzBuffer1, nStartPos1, DataByteArray, 0, ntotalMessageChunkLength - 4); long nRemaining = ChartByteArray2NDx - (ntotalMessageChunkLength + nStartPos1); if (nRemaining == 0) { /*/ * Reset the primary collection array. /*/ ChartByteArray2NDx = 0; ChartByteArray2 = new byte[BUFFER_SIZE]; } else { /*/ * Reposition the primary collection array by moving the remaining data toward the top of the collection array. * This will allow for unprocessed data received to get processed next in line and any new data will get place * at the bottom of the collection array where it will wait its place in line. /*/ ChartByteArray2NDx = ChartByteArray2NDx - (ntotalMessageChunkLength + nStartPos1); aTempStorage = new byte[nRemaining]; Array.Copy(gzBuffer1, (ntotalMessageChunkLength + nStartPos1), aTempStorage, 0, nRemaining); ChartByteArray2 = new byte[BUFFER_SIZE]; Array.Copy(aTempStorage, 0, ChartByteArray2, 0, nRemaining); } break; } } if (lEndFound == true) { bool lContinueParsing = true; while (lContinueParsing == true) { List<L1quotes> oL1Quotes = new List<L1quotes>(); L1quotes oL1Quote = new L1quotes(); string compressedText = Convert.ToBase64String(DataByteArray); byte[] gzBuffer = Convert.FromBase64String(compressedText); byte[] nMsg = null; int nFieldNumber = 0; int nFieldNDX = 0; int nStartPos = 0; short nStringlLength = 0; /*/ * Stock Symbol : Field 0 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 0) { nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nStringlLength = BitConverter.ToInt16(nMsg, 0); nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nFieldNDX, nMsg, 0, nStringlLength); oL1Quote.stock = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength); } else nFieldNDX--; } /*/ * Bid Price : Field 1 /*/ nFieldNDX = nFieldNDX + nStringlLength; if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 1) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Ask Price : Field 2 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 2) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Last Price : Field 3 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 3) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Bid Size : Field 4 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 4) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Ask Size : Field 5 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 5) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Bid ID : Field 6 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 6) { nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Ask ID : Field 7 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 7) { nMsg = new byte[sizeof(short)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Volume : Field 8 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 8) { nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Last Size : Field 9 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 9) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Trade Time : Field 10 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 10) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Quote Time : Field 11 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 11) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * High : Field 12 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 12) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Low : Field 13 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 13) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Tick : Field 14 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 14) { nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); } else nFieldNDX--; } /*/ * Close : Field 15 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 15) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Exchange : Field 16 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 16) { nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); } else nFieldNDX--; } /*/ * Marginable : Field 17 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 17) { nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); } else nFieldNDX--; } /*/ * Shortable : Field 18 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 18) { nMsg = new byte[sizeof(bool)]; nMsg[0] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char)); } else nFieldNDX--; } /*/ * ISLAND BID : Field 19 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 19) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * ISLAND ASK : Field 20 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 20) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * ISLAND ASK : Field 21 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 21) { nMsg = new byte[sizeof(long)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; nMsg[4] = gzBuffer[nFieldNDX++]; nMsg[5] = gzBuffer[nFieldNDX++]; nMsg[6] = gzBuffer[nFieldNDX++]; nMsg[7] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * QUOTE DATE : Field 22 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 22) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * QUOTE DATE : Field 23 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 23) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Volatility : Field 24 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 24) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Description : Field 25 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 25) { nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength); } else nFieldNDX--; } /*/ * Trade ID : Field 26 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 26) { nMsg = new byte[sizeof(char)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); nMsg = new byte[sizeof(char)]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char)); oL1Quote.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char)); } else nFieldNDX--; } /*/ * Digits : Field 27 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 27) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Open : Field 28 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 28) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Change : Field 29 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 29) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * 52-Week High : Field 30 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 30) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * 52-Week Low : Field 31 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 31) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * PE-Ratio : Field 32 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 32) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Dividend Amount : Field 33 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 33) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * Dividend Yield : Field 34 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 34) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * ISLAND BID SIZE : Field 35 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 35) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * ISLAND ASK SIZE : Field 36 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 36) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * NAV : Field 37 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 37) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * FUND : Field 38 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); nStartPos = nFieldNDX; if (nFieldNumber == 38) { nMsg = new byte[sizeof(float)]; nMsg[0] = gzBuffer[nFieldNDX++]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[2] = gzBuffer[nFieldNDX++]; nMsg[3] = gzBuffer[nFieldNDX++]; Array.Reverse(nMsg); oL1Quote.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0); } else nFieldNDX--; } /*/ * EXCHANGE NAME : Field 39 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 39) { nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength); } else nFieldNDX--; } /*/ * DIVIDEND DATE : Field 40 /*/ if (nFieldNDX < gzBuffer.Length) { nMsg = new byte[sizeof(Int32)]; nMsg[0] = gzBuffer[nFieldNDX++]; nFieldNumber = BitConverter.ToInt32(nMsg, 0); if (nFieldNumber == 40) { nMsg = new byte[sizeof(short)]; nMsg[1] = gzBuffer[nFieldNDX++]; nMsg[0] = gzBuffer[nFieldNDX++]; nStartPos = nFieldNDX; nStringlLength = BitConverter.ToInt16(nMsg, 0); nFieldNDX = nFieldNDX + nStringlLength; nMsg = new byte[nStringlLength]; Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength); oL1Quote.dividend_date = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength); } else nFieldNDX--; } oL1Quotes.Add(oL1Quote); rs.SendLevelOneDataStreaming(oL1Quotes, rs.stockSymbol, rs.ServiceName); if (nFieldNDX >= gzBuffer.Length - 1) { lContinueParsing = false; } } } } //// Make another call so that we continue retrieving any all incoming data if (rs.lNewStockSymbol == false) { try { IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs); } catch (Exception exc) { rs.CloseStream(rs); responseStream.Close(); rs.oParent.TD_RequestAsyncLevel1QuoteStreaming(rs.stockSymbol, rs.ServiceName, rs.oParentForm); rs.oParent = null; } } } } catch (Exception exc) { /*/ This is very important. In case the remote server should drop our connection /*/ /*/ This will allow us to recreate the original request and begin reciving data. /*/ if (rs.lNewStockSymbol == false) { rs.CloseStream(rs); rs.oParent.TD_RequestAsyncLevel1QuoteStreaming(rs.stockSymbol, rs.ServiceName, rs.oParentForm); rs.oParent = null; } return; } }