プロジェクトの非同期ラッパーを作成して、コードを整理し、サーバーとやり取りするオブジェクトに対して同じコードを何度も記述しないようにしようとしています。
私は protobuf を使用する予定ですが、このスレッドのために、オブジェクトを文字列に変更しました。
私のマンボジャンボコード:
public class AsyncWrapper
{
public void Run(Uri url, string requestString, string responseString, WebHeaderCollection headerCollection)
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Headers = headerCollection;
request.BeginGetRequestStream((s) =>
{
var req = (HttpWebRequest)s.AsyncState;
var str = req.EndGetRequestStream(s);
System.Text.UnicodeEncoding encoding = new System.Text.UnicodeEncoding();
Byte[] bytes = encoding.GetBytes(responseString);
str.Write(bytes, 0, bytes.Length);
str.Close();
req.BeginGetResponse((k) =>
{
var req2 = (HttpWebRequest)k.AsyncState;
var resp = (HttpWebResponse)req2.EndGetResponse(k);
byte[] bytes2 = ReadFully(resp.GetResponseStream());
string res = System.Text.Encoding.Unicode.GetString(bytes2);
}, req);
}, null);
}
private static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
}
私がやろうとしているのは、サーバーとの "2 段階" 通信方法の手順全体をラップする 1 つの関数を作成することです。最初に最初の要求、次に応答です。
私は正しい道を進んでいますか?重要な部分が欠けています。イベント処理。計画では、でイベントを発生string res = System...
させて、ジョブが完了したことをアプリケーションに知らせることでした。