HTTPを使用してJSON RPCインターフェイス経由でXBMCと通信するためにC#で.NETライブラリをコーディングしています。C#async httpライブラリで大量のデリゲートとユーザーコールバックを管理する方法
私はpreliminary versionをコード化してリリースしましたが、すべてが同期して行われます。私はXBMC remote for WP7を構築していたので、私自身の目的のためにライブラリを非同期に記録しました。
私は今、新しい非同期ライブラリをリリースしたいと思いますが、私がする前にそれがきれいできちんとしていることを確認したいと思います。
非同期な性質のため、ユーザーはリクエストを開始し、代理人に一致するコールバックメソッドを提供し、受信後に応答を処理します。
問題は、ライブラリ内で要求の存続期間中のRequestStateオブジェクトを追跡し、http要求/応答とユーザーのコールバックなどがメンバー変数として含まれていることです。 1つのタイプのオブジェクトが戻ってきましたが、ユーザーが何を呼び出すかによって、曲のリストまたはムービーのリストなどが返されます。
私の実装では、単一のデリゲートResponseDataRecievedを使用しています。単純なオブジェクト - これは私によってのみ使用されるので、どのメソッドが何を返すのかを知っています。レスポンスを処理するとき、私は実際にそれを知っているタイプにオブジェクトをキャストします。リスト、リストなど
サードパーティはこれを行う必要はありません。 - デリゲートの署名に正しいタイプのオブジェクトが含まれている必要があります。だから私は第三者に返すことができるすべてのタイプの応答データの代理人が必要です - 具体的な問題は、どのように私は内部的にこれを正常に処理するのですか? - それぞれが異なるメンバー変数を持つ別々のRequestStateオブジェクトを持っていますか?異なる代表のために?それは正しいとは感じません。私はちょうどこれを優雅にそしてきれいにする方法を知らない。
ありがとうございました。私はまだ私のRequestStateオブジェクトにアクションを表現する方法について私の頭をラップするのに問題を抱えています。メンバー変数として宣言するときに型を提供する必要がありますが、実際には実行時までそれを知ることができません。私はpastebin'dいくつかの例のコードを私の問題をより明確に説明した。私はこれについてはあまりにもn00bではないことを願っています:( - http://pastebin.com/qjJgFPmV –
Tyler
私はあなたのコードを見て、これはジェネリック型パラメータのかなり重い伝播を参照してくださいように見える私は今仕事中ですが、後で詳しく調べる時間を見つけようとしています。その間に、誰かがそれを刺したければ、それに行きましょう:-) – Rytmis
これは完全な例ではありません。私はあなたの完全なソースコードを持っていないので、間違ったことを推測しているかもしれません。ただし、XDataReceivedコールバックを、該当する場合は、のActionに置き換えました。 –
Rytmis