//--------------------------------------------------------------------------------------------------------------------------------------------------- // SendWebRequest //--------------------------------------------------------------------------------------------------------------------------------------------------- public bool SendWebAsyncReq(TCWebAsyncInfo wai) { allDone = new ManualResetEvent(false); try { if (wai.ReqStr.Length < 1) { return(false); } Uri uri = new Uri(wai.ReqStr); WebRequest wreq = WebRequest.Create(uri); wreq.Credentials = CredentialCache.DefaultCredentials; if (wai.UseSSL) { wreq.Headers.Add(wai.ApiKey, wai.SecretKey); ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; } wai.WebReq = wreq; IAsyncResult r = (IAsyncResult)wreq.BeginGetResponse(new AsyncCallback(RespCallback), wai); allDone.WaitOne(wai.Timeout, false); } catch (Exception e) { wai.Error = "SendWebAsyncReq::Error - " + e.Message + "\r\n" + e.StackTrace; return(false); } return(true); }
public TCWebAsyncInfo ReqQuoteAsync(string url, string symbol, int timeout = 3000) { TCWebAsyncInfo wai = new TCWebAsyncInfo(WAC, timeout, symbol); wai.ReqStr = url + symbol; WAC.SendWebAsyncReq(wai); return(wai); }
//--------------------------------------------------------------------------------------------------------------------------------------------------- // RespCallback //--------------------------------------------------------------------------------------------------------------------------------------------------- private static void RespCallback(IAsyncResult ar) { TCWebAsyncInfo wai = null; try { wai = (TCWebAsyncInfo)ar.AsyncState; WebRequest req = wai.WebReq; WebResponse resp = req.EndGetResponse(ar); Stream ResponseStream = resp.GetResponseStream(); wai.RespStream = ResponseStream; IAsyncResult iarRead = ResponseStream.BeginRead(wai.ReadBuf, 0, TCWebAsyncInfo.BufSize, new AsyncCallback(ReadCallBack), wai); } catch (Exception e) { if (wai != null) { wai.Error = "RespCallback::Error - " + e.Message + "\r\n" + e.StackTrace; } } }
//--------------------------------------------------------------------------------------------------------------------------------------------------- // ReadCallBack //--------------------------------------------------------------------------------------------------------------------------------------------------- private static void ReadCallBack(IAsyncResult ar) { TCWebAsyncInfo wai = null; try { wai = (TCWebAsyncInfo)ar.AsyncState; wai.ReadSize = wai.RespStream.EndRead(ar); if (wai.ReadSize > 0) { wai.ReadDataSize = wai.StreamDecode.GetChars(wai.ReadBuf, 0, wai.ReadSize, wai.ReadCBuf, 0); wai.RespData.Append(Encoding.ASCII.GetString(wai.ReadBuf, 0, wai.ReadSize)); IAsyncResult iar = wai.RespStream.BeginRead(wai.ReadBuf, 0, TCWebAsyncInfo.BufSize, new AsyncCallback(ReadCallBack), wai); } else { if (wai.RespData.Length > 0) { wai.Success = true; wai.RespDataStr = wai.RespData.ToString(); wai.WAC.WebLibCB.OnWebAsyncUpdateCB(wai); return; } wai.RespStream.Close(); allDone.Set(); } } catch (Exception e) { if (wai != null) { wai.Error = "ReadCallBack::Error - " + e.Message + "\r\n" + e.StackTrace; } } return; }
public new void OnWebAsyncUpdate(TCWebAsyncInfo wai) { TCQuote quote = new TCQuote(wai.RespDataStr); Isys.OnQuote(quote); }