2012-02-23 20 views
3

(TAzureBlobServiceまたはTAmazonStorageServiceを使用して)クラウドサービスにデータをアップロードまたはダウンロードする際に、アップロード/ダウンロードの進捗状況に関するフィードバックを得る方法がないようです。TAzureBlobServiceおよびTAmazonStorageServiceの進捗イベント

最終的にTIdTCPClientCustom.Connectが呼び出され、その関数では、接続用のデフォルトのIOHandlerが作成されます(存在しない場合はSSLを使用しない場合は作成されません)。そのIOHandlerのOnWorkBegin、OnWorkEnd、およびOnWorkイベントを設定することができれば、進捗状況を追跡できますが、それを行う方法はありません。

SSL接続が使用されている場合、IOHandlerが作成されます(たとえば、TAzureBlobService.PrepareRequest).IOHandlerはインターフェイスであり、OnWorkBeginなどのプロパティはありません。

解決策は、TAzureBlobServiceまたはTAmazonStorageServiceの子孫クラスを作成し、PrepareRequestメソッドをオーバーライドすることです。私はPrepareRequestで作成されたTCloudHTTPインスタンスにアクセスすることができ、そこからIOHandlerにアクセスできます。しかし、IOHandlerを(インターフェイスとして定義されているように)作成し、イベント(そのインターフェイスの一部ではない)を設定するにはどうすればよいですか?

おかげ

答えて

1

TIdCustomTCPClientTIdIOHandlerの両方から派生OnWorkイベントTIdComponentによって公開されています、。 TIdIOHandlerはインターフェイスではありません。

TIdCustomTCPClientは、のイベントにフックし、IOHandlerが割り当てられています。イベントハンドラをTIdCustomTCPClientで提供されるOnWorkイベントに割り当ててください.TIdIOHandlerに直接する必要はありません。それでは、実行時にIOHandlerのどのような種類が割り当てられるかは関係ありません。

+0

ポインタをありがとう、私は今それを考え出した。私の代わりのPrepareRequest関数では、単純に(Result.Peer.GetObjectをTIdTCPClientCustomとして).OnWorkBegin:= abcを使って作業イベントを設定します。 PrepareRequestの結果はTCloudHTTPです。 – Mick

関連する問題