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