QuickStart
Verbinden, abonnieren, veröffentlichen
Verbinde das Protokoll mit einem Client, öffne die Verbindung, abonniere ein Topic und veröffentliche darauf. Die Nachricht kommt über OnMQTTPublish zurück.
uses
Classes, SysUtils,
sgcWebSocket, sgcWebSocket_Classes, sgcWebSocket_Protocols,
sgcWebSocket_Types, sgcWebSocket_Protocol_MQTT_Client,
sgcWebSocket_Protocol_MQTT_Message;
procedure TfrmClientPROTOCOL.FormCreate(Sender: TObject);
begin
WSClient := TsgcWebSocketClient.Create(Self);
WSClient.Host := 'www.esegece.com';
WSClient.Port := 15675;
WSClient.TLS := False;
MQTT.Client := WSClient;
WSClient.Active := True;
end;
Für reines MQTT über TCP statt über WebSockets erzeugst du stattdessen einen TsgcTCPClient aus sgcTCP_Client_WS und richtest MQTT.Client darauf. Sonst ändert sich nichts, und genau deshalb sind die beiden Komponenten getrennt.
procedure TfrmClientPROTOCOL.btnSubscribeClick(Sender: TObject);
begin
MQTT.Subscribe('sgc/quickstart');
end;
procedure TfrmClientPROTOCOL.btnPublishClick(Sender: TObject);
begin
MQTT.Publish('sgc/quickstart', 'hello from Delphi',
mtqsAtLeastOnce, False);
end;
procedure TfrmClientPROTOCOL.btnUnsubscribeClick(Sender: TObject);
begin
MQTT.UnSubscribe('sgc/quickstart');
end;
Publish liefert ein Word, den Paketbezeichner, und wartet nicht. PublishAndWait liefert ein Boolean und blockiert, bis der Broker bestätigt, mit einem Timeout, der standardmäßig zehn Sekunden beträgt. TmqttQoS stammt aus sgcWebSocket_Types.
procedure TfrmClientPROTOCOL.MQTTMQTTConnect(Connection: TsgcWSConnection;
const Session: Boolean; const ReasonCode: Integer;
const ReasonName: String;
const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
memoLog.Lines.Add('#connected: ' + ReasonName);
end;
procedure TfrmClientPROTOCOL.MQTTMQTTSubscribe(Connection: TsgcWSConnection;
aPacketIdentifier: Word; aCodes: TsgcWSSUBACKS;
SubscribeProperties: TsgcWSMQTTSUBACKProperties);
begin
memoLog.Lines.Add('#subscribed: ' + IntToStr(aPacketIdentifier));
end;
procedure TfrmClientPROTOCOL.MQTTMQTTPublish(Connection: TsgcWSConnection;
aTopic, aText: string;
PublishProperties: TsgcWSMQTTPUBLISHProperties);
begin
memoLog.Lines.Add(aTopic + ': ' + aText);
end;
Das sind die drei, die zuerst wichtig sind. Neun weitere gibt es für den Bestätigungsablauf, das Trennen und die MQTT-5.0-Authentifizierung. Lass die IDE die Handler generieren, denn die Parameterlisten sind lang und die Properties-Objekte unterscheiden sich je Ereignis.