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 握手完成后(QoS 0 立即触发;QoS 1 在 PUBACK 后触发;QoS 2 在 PUBREC → PUBREL → PUBCOMP 后触发),对每个传入的 PUBLISH 触发。参数:
Value(String)、Bytes(TBytes)和 Stream(TMemoryStream)。选择与您的内容(文本、二进制数据块、流消费者)匹配的那个。选择处理 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;