TsgcWSPClient_MQTT › メソッド › PublishAndWait
メッセージを発行し、ブローカーがそれを確認応答するかタイムアウトが経過するまでブロックします。
function PublishAndWait(const aTopic, aText: String; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;
| 名前 | タイプ | 説明 |
|---|---|---|
aTopic | const String | PUBLISH パケットのターゲットトピック名。 |
aText | const String | メッセージの UTF-8 ペイロード。 |
aQoS | TmqttQoS | 配信保証。QoS 1 と QoS 2 のみがブローカーの確認応答を生成するため、QoS 0 はパケットが書き込まれた直後にTrueを返します。 |
aRetain | Boolean | ブローカーに転送される Retain フラグ。 |
aPublishProperties | const TsgcWSMQTTPublish_Properties | オプションの MQTT 5.0 パブリッシュプロパティ。不要な場合は nil を渡します。 |
aTimeout | const Integer | 一致する PUBACK(QoS 1)または PUBCOMP(QoS 2)を待機する最大時間(ミリ秒)。デフォルトは 10000。 |
タイムアウトが切れる前にブローカーがメッセージを確認した場合は True。待機がタイムアウトまたはセッションがドロップした場合は False。(Boolean)
同期テキストオーバーロード。呼び出し元がブローカーへのメッセージ到達を確認する必要があるリクエスト/レスポンスワークフローや起動スクリプトに便利です。コンポーネント自身のイベントコールバックから呼び出してはいけません。それらはすでにトランスポートスレッドでシリアル化されており、デッドロックが発生します。
if not MQTT.PublishAndWait('alerts/critical', '{"code":500}', mtqsAtLeastOnce, False, nil, 5000) then
raise Exception.Create('broker did not acknowledge alert');
function PublishAndWait(const aTopic: String; const aStream: TStream; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;
| 名前 | タイプ | 説明 |
|---|---|---|
aTopic | const String | バイナリ PUBLISH パケットのターゲットトピック名。 |
aStream | const TStream | ペイロードとして送信される生のバイトを提供するストリーム。送信前に完全に読み取ります。 |
aQoS | TmqttQoS | PUBLISHパケットに適用される配信保証。 |
aRetain | Boolean | ブローカーに転送される Retain フラグ。 |
aPublishProperties | const TsgcWSMQTTPublish_Properties | オプションの MQTT 5.0 プロパティ。バイナリペイロードのコンテンツタイプを設定するためによく使用されます。 |
aTimeout | const Integer | QoS 1/2 の確認応答を待機する最大ミリ秒数。デフォルトは 10000 です。 |
確認応答では True、タイムアウトまたは切断では False。(Boolean)
呼び出し元のコードが各チャンクがブローカーによって保存されたことを確認する必要があるファイルアップロードフローに適した同期バイナリオーバーロードです。イベントハンドラーからの呼び出しは避け、低速なネットワークで大きなペイロードを送信する場合は現実的なタイムアウトを使用してください。
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('config.bin');
if not MQTT.PublishAndWait('devices/123/config', oStream, mtqsExactlyOnce, True, nil, 30000) then
ShowMessage('config upload failed');
finally
oStream.Free;
end;