private static void ResponseCallback(System.IAsyncResult ar) { /* 状態オブジェクトとしてわたされたCurlを取得 */ Curl www = (Curl)ar.AsyncState; try { /* 非同期要求を終了 */ System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)www.request.EndGetResponse(ar); /* status code */ www.status = (int)res.StatusCode; /* 読み出し用ストリームを取得 */ www.responseStream = res.GetResponseStream(); /* 非同期でデータの読み込みを開始 */ www.responseStream.BeginRead(www.readWorkMemory, 0, www.readWorkMemory.Length, new System.AsyncCallback(ReadCallback), www); } catch (System.Exception e) { www.exception = e; www.requestFinished = true; } }
/* 非同期読み込み完了時に呼び出されるコールバックメソッド */ private static void ReadCallback(System.IAsyncResult ar) { /* 状態オブジェクトとしてわたされたCurlを取得 */ Curl www = (Curl)ar.AsyncState; try { /* データを読み込む */ int readSize = www.responseStream.EndRead(ar); if (readSize > 0) { /* データが読み込めた時 */ /* 読み込んだデータをMemoryStreamに保存する */ www.responseData.Write(www.readWorkMemory, 0, readSize); /* 再び非同期でデータを読み込む */ www.responseStream.BeginRead(www.readWorkMemory, 0, www.readWorkMemory.Length, new System.AsyncCallback(ReadCallback), www); } else { /* データの読み込みが終了した時 */ /* 閉じる */ www.responseStream.Close(); www.responseStream = null; www.requestFinished = true; } } catch (System.Exception e) { www.exception = e; www.requestFinished = true; } }
public WebYieldContext(CallAttr attr, ResponseDelegate d, string url, object[] args, Dictionary <string, object> headers) { var str = Json.Serialize(args); byte[] body = System.Text.Encoding.ASCII.GetBytes(str); this.d = d; this.timeout_at = Time.time + attr.timeout; //Debug.Log("WWW parm:" + url + "|" + str + "|" + headers); _www = new Curl(url, body, headers); _reader = Start(); }