TsgcWSPClient_MQTT메서드 › PublishAndWait

PublishAndWait 메서드

메시지를 게시하고 브로커가 확인하거나 타임아웃이 경과할 때까지 블로킹됩니다.

Overloads

오버로드 1

구문

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

Parameters

NameType설명
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');

Overload 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;

Parameters

NameType설명
aTopicconst String바이너리 PUBLISH 패킷의 대상 토픽 이름입니다.
aStreamconst TStream페이로드로 전송되는 원시 바이트를 공급하는 스트림입니다. 전송 전에 전부 읽힙니다.
aQoSTmqttQoSPUBLISH 패킷에 적용되는 전달 보장입니다.
aRetainBoolean브로커에 전달되는 Retain 플래그입니다.
aPublishPropertiesconst TsgcWSMQTTPublish_Properties선택적 MQTT 5.0 속성으로, 일반적으로 바이너리 페이로드의 Content Type을 설정하는 데 사용됩니다.
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;

메서드로 돌아가기