All pastes #757317 Raw Edit

Something

public text v1 · immutable
·published 2007-11-01 05:00 UTC
rendered paste body
public bool StartAsync()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(server.hostpath);
    finished = new ManualResetEvent(false);
    writeEvent = new AutoResetEvent(true);
    OutFile = new FileStream(String.Format("{0}{1}", file.savepath, file.partname), FileMode.Create);
    buffer = new byte[1024];

    request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);

    finished.WaitOne();
    OutFile.Close();
    return true;
}

private void ResponseCallback(IAsyncResult ar)
{
    WebRequest request = (WebRequest)ar.AsyncState;
    WebResponse response = request.EndGetResponse(ar);
    Stream strm = response.GetResponseStream();
    strm.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(ReadCallBack), strm);
}

private void ReadCallBack(IAsyncResult ar)
{
    Stream strm = (Stream)ar.AsyncState;
    int count = strm.EndRead(ar);

    if (count > 0)
    {
        OutFile.BeginWrite(buffer, 0, count, new AsyncCallback(WriteCallBack), OutFile);
        strm.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(ReadCallBack), strm);
    }
    else
    {
        strm.Close();
        finished.Set();
    }
}

private void WriteCallBack(IAsyncResult ar)
{
    writeEvent.WaitOne();
    FileStream fs = (FileStream)ar.AsyncState;
    fs.EndWrite(ar);
    writeEvent.Set();
}