TsgcWSPClient_MQTT › 이벤트 › OnMQTTPublishEx
들어오는 PUBLISH에서 발생합니다. 페이로드를 TsgcWSMQTTPublishData(Value, Bytes, Stream)와 원시 TsgcWSMQTTMessage로 전달합니다.
property OnMQTTPublishEx: TsgcWSMQTTPublishExEvent;
// TsgcWSMQTTPublishExEvent = procedure(Connection: TsgcWSConnection; aTopic: String; aData: TsgcWSMQTTPublishData; PublishProperties: TsgcWSMQTTPUBLISHProperties; aMessage: TsgcWSMQTTMessage) of object
—
바이너리 페이로드 및 저수준 검사를 위한 OnMQTTPublish의 확장 변형. 전송 수준 QoS 핸드셰이크가 완료된 후 들어오는 모든 PUBLISH에 대해 발생합니다(QoS 0 즉시; QoS 1 PUBACK 후; QoS 2 PUBREC → PUBREL → PUBCOMP 후). 매개변수:
Value(String), Bytes(TBytes) 및 Stream(TMemoryStream). 콘텐츠(텍스트, 바이너리 blob, 스트림 consumer)에 맞는 것을 선택하십시오.OnMQTTPublish 또는 OnMQTTPublishEx 중 하나를 처리하십시오(구성 요소는 수신 메시지를 할당된 쪽으로 전달합니다). 페이로드가 유효한 UTF-8임이 보장되지 않을 때는 OnMQTTPublishEx가 선호됩니다.
procedure TForm1.MQTTPublishEx(Connection: TsgcWSConnection;
aTopic: String; aData: TsgcWSMQTTPublishData;
PublishProperties: TsgcWSMQTTPUBLISHProperties;
aMessage: TsgcWSMQTTMessage);
var
vBytes: TBytes;
begin
Memo1.Lines.Add(Format('[%s] QoS=%d %d bytes',
[aTopic, Ord(aMessage.QoS), Length(aData.Bytes)]));
// read the payload as raw bytes (safe for binary content)
vBytes := aData.Bytes;
// or pull it through the stream API
aData.Stream.Position := 0;
SaveStreamToFile(aData.Stream, 'payload.bin');
end;