void ResponseCallback(IAsyncResult ar) { HttpWebRequest req = ar.AsyncState as HttpWebRequest; if (req == null) { return; } HttpWebResponse response = req.EndGetResponse(ar) as HttpWebResponse; if (response.StatusCode != HttpStatusCode.OK) { status = WebRequestStatus.Error; response.Close(); return; } FileStream fileStream = new FileStream(m_path, FileMode.Create, FileAccess.ReadWrite, FileShare.Write); WebRequestBuffer st = new WebRequestBuffer(fileStream); st.WebResponse = response; Stream responseStream = response.GetResponseStream(); st.OrginalStream = responseStream; responseStream.BeginRead(st.Buffer, 0, WebRequestBuffer.BufferSize, new AsyncCallback(HttpReadCallback), st); }
void HttpReadCallback(IAsyncResult ar) { //Loom.QueueOnMainThread(() => { Debug.Log(123123); }); try { WebRequestBuffer rs = ar.AsyncState as WebRequestBuffer; int read = rs.OrginalStream.EndRead(ar); if (read > 0) { rs.fs.Write(rs.Buffer, 0, read); rs.fs.Flush(); rs.OrginalStream.BeginRead(rs.Buffer, 0, WebRequestBuffer.BufferSize, new AsyncCallback(HttpReadCallback), rs); } else { long length = rs.fs.Length; data = new byte[length]; rs.fs.Seek(0, SeekOrigin.Begin); rs.fs.Read(data, 0, data.Length); rs.fs.Close(); rs.OrginalStream.Close(); rs.WebResponse.Close(); using (FileStream fs = new FileStream(m_path + ".info", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { fs.Seek(0, SeekOrigin.Begin); byte[] v = BitConverter.GetBytes(m_version); fs.Write(v, 0, v.Length); byte[] c = BitConverter.GetBytes(m_crc); fs.Write(c, 0, c.Length); fs.Flush(); } } status = WebRequestStatus.OK; } catch (Exception e) { status = WebRequestStatus.Error; Loom.QueueOnMainThread(() => { Debug.LogError(e.Message); }); } }