private void SendRequestForDownload(Stream outStream, ProgressCallbackHelper progressCallback, KiiHttpClientCallback callback) { SetSDKClientInfo(); try { HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse(); ApiResponse res = ParseResponseHeader(httpResponse); // read body ReadBodyStream(httpResponse, progressCallback, outStream); res.Body = ""; callback(res, null); } catch (System.Net.WebException e) { Console.Write("Exception " + e.Message); System.Net.HttpWebResponse err = (System.Net.HttpWebResponse)e.Response; // read body string body = ReadBodyFromResponse(err); callback(null, KiiHttpUtils.TypedException((int)err.StatusCode, body)); } catch (Exception e) { callback(null, e); } }
private void SendRequest(Stream body, ProgressCallbackHelper progressCallback, KiiHttpClientCallback callback) { System.IO.Stream reqStream = null; try { long doneByte = 0; long totalByte = body.Length; request.ContentLength = totalByte; reqStream = request.GetRequestStream(); byte[] buffer = new byte[4096]; int count; while (true) { count = body.Read(buffer, 0, buffer.Length); if (count <= 0) { break; } reqStream.Write(buffer, 0, count); doneByte += count; if (doneByte > totalByte) { doneByte = totalByte; } progressCallback.NotifyProgress(doneByte, totalByte); } } catch (SystemException e) { callback(null, new NetworkException(e)); return; } finally { if (reqStream != null) { reqStream.Close(); } } SendRequest(callback); }
protected void ReadBodyStream(System.Net.HttpWebResponse response, ProgressCallbackHelper progressCallback, Stream outStream) { System.IO.Stream s = null; try { s = response.GetResponseStream(); byte[] buffer = new byte[4096]; int count; long doneByte = 0; long totalByte = response.ContentLength; while (true) { count = s.Read(buffer, 0, buffer.Length); if (count <= 0) { break; } outStream.Write(buffer, 0, count); doneByte += count; if (doneByte > totalByte) { doneByte = totalByte; } if (progressCallback != null) { progressCallback.NotifyProgress(doneByte, totalByte); } } } catch (SystemException e) { throw new NetworkException(e); } finally { if (s != null) { s.Close(); } } }