TsgcWSPClient_MQTTメソッド › PublishAndWait

PublishAndWait メソッド

メッセージを発行し、ブローカーがそれを確認応答するかタイムアウトが経過するまでブロックします。

オーバーロード

オーバーロード 1

構文

function PublishAndWait(const aTopic, aText: String; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;

パラメータ

名前タイプ説明
aTopicconst StringPUBLISH パケットのターゲットトピック名。
aTextconst Stringメッセージの UTF-8 ペイロード。
aQoSTmqttQoS配信保証。QoS 1 と QoS 2 のみがブローカーの確認応答を生成するため、QoS 0 はパケットが書き込まれた直後にTrueを返します。
aRetainBooleanブローカーに転送される Retain フラグ。
aPublishPropertiesconst TsgcWSMQTTPublish_Propertiesオプションの MQTT 5.0 パブリッシュプロパティ。不要な場合は nil を渡します。
aTimeoutconst 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');

オーバーロード 2

構文

function PublishAndWait(const aTopic: String; const aStream: TStream; aQoS: TmqttQoS = mtqsAtMostOnce; aRetain: Boolean = False; const aPublishProperties: TsgcWSMQTTPublish_Properties = nil; const aTimeout: Integer = 10000): Boolean;

パラメータ

名前タイプ説明
aTopicconst Stringバイナリ PUBLISH パケットのターゲットトピック名。
aStreamconst TStreamペイロードとして送信される生のバイトを提供するストリーム。送信前に完全に読み取ります。
aQoSTmqttQoSPUBLISHパケットに適用される配信保証。
aRetainBooleanブローカーに転送される Retain フラグ。
aPublishPropertiesconst TsgcWSMQTTPublish_Propertiesオプションの MQTT 5.0 プロパティ。バイナリペイロードのコンテンツタイプを設定するためによく使用されます。
aTimeoutconst IntegerQoS 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;

メソッドに戻る