예제 #1
0
파일: MyHttp.cs 프로젝트: RoOoOom/Assets
    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);
    }
예제 #2
0
파일: MyHttp.cs 프로젝트: RoOoOom/Assets
    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); });
        }
    }