matlab.net.http.io.MultipartConsumer クラス
名前空間: matlab.net.http.io
スーパークラス: matlab.net.http.io.GenericConsumer
HTTP メッセージ内のマルチパート コンテンツ タイプのヘルパー
説明
このコンシューマーはマルチパート HTTP 応答メッセージを処理します。マルチパート メッセージは、その Content-Type ヘッダー フィールドに "multipart" が指定されていて、本文には 1 つ以上の部分が含まれているものです。各部分には、部分を記述する独自のヘッダー フィールドのセットが含まれていますが、それらで最も重要なものは Content-Type フィールドです。
matlab.net.http.io.MultipartConsumer クラスは handle クラスです。
サブクラスの作成
独自の ContentConsumer を作成している場合、これが最上位のコンシューマー (RequestMessage.send メソッドの 3 番目の引数として指定されている) でもマルチパート メッセージのパート (MultipartConsumer コンストラクターの呼び出しの "デリゲート" として指定されている場合) でも機能します。MultipartConsumer により、各デリゲートが応答メッセージ全体を処理しているように見えますが、実際には、結果を組み立てて、返された response.Body.Data プロパティに格納される ResponseMessages の配列に設定しています。
次に、MultipartConsumer の動作について説明します。
この MultipartConsumer がサーバーから完全なメッセージのパートを受信する場合、このパート内にヘッダーがあれば、これを解析して、このパート内の Content-Type フィールドに適したデリゲート コンシューマーを呼び出します。このパートに Content-Type フィールドがない場合、タイプは text/plain であると想定されます。このタイプを処理できるデリゲートがない場合、GenericConsumer の記述に従って、Content-Type に基づいてパートの既定の処理を使用します。
MultipartConsumer は、完全なパートを受信するまでデリゲートを呼び出しません。MultipartConsumer は、パートのデータをバッファーして、パートの受信の最後には、ContentConsumer の表示されているプロパティすべてをこのコンシューマーからデリゲートにコピーします。デリゲートの Response.Body をクリアし、デリゲートの Header をパートのヘッダーに設定してから、デリゲートの initialize メソッドおよび start メソッドを呼び出します。その後、パートのペイロードを含むデリゲートの putData メソッドが 1 回以上呼び出され、データ終了を示す putData(uint8.empty) の呼び出しが続きます。デリゲートの initialize メソッドが、パートを処理しないことを示すために false を返す場合、パートのペイロードは、GenericConsumer の記述に従って、パートの Content-Type の既定の動作を使用して処理されます。
デリゲートの start メソッドが、目的の最大バッファー サイズがないことを示すために [] を返す場合、MultipartConsumer は、パートのペイロード全体を提供する putData への呼び出しを一度だけ行い、データ終了呼び出しが続きます。それ以外の場合は、バッファー サイズの単位内のペイロード全体を提供するために十分な回数 putData を呼び出します。
デリゲートの putData メソッドが、さらにデータを必要としないことを示すために STOP 戻り値を true に設定する場合、MultipartConsumer はメッセージが終了していたかのように転送を終了するために接続を閉じます。このように、デリゲートは元のメッセージの残りを処理するかどうかを制御します。putData が [] の SIZE を返す場合、メッセージも終了しますが、RequestMessage.send の呼び出し元に例外がスローされます。
パートのコンシューマーが ContentConsumer インスタンスではなく関数ハンドルとして指定されている場合、関数はコンシューマーが最初に必要になったときにのみ呼び出され、同じ応答メッセージの後続の該当するパートに対してはいずれも同じコンシューマー インスタンスが使用されます。関数ハンドルで処理されたパートについては、関数からは ResponseMessage の本文にアクセスできないため、Response.Body.Data の対応する ResponseMessage にパートのヘッダーのみが格納されます。
デリゲートされたコンシューマーは MyDelegator プロパティを通してこのコンシューマーとそのプロパティにアクセスできますが、この処理が必要になることはほとんどありません。
作成
説明
入力引数
プロパティ
メソッド
詳細
バージョン履歴
R2018a で導入
