QuickStart
Verbinden, abonneren, publiceren
Koppel het protocol aan een client, open de verbinding, abonneer je op een topic en publiceer ernaar. Het bericht komt terug op OnMQTTPublish.
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;
Maak voor gewoon MQTT via TCP in plaats van via WebSockets in plaats daarvan een TsgcTCPClient aan uit sgcTCP_Client_WS en laat MQTT.Client daarnaar wijzen. Verder verandert er niets, en dat is de reden dat de twee componenten gescheiden zijn.
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 geeft een Word terug, de pakketidentificatie, en wacht niet. PublishAndWait geeft een Boolean terug en blokkeert tot de broker bevestigt, met een time-out die standaard tien seconden is. TmqttQoS komt uit 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;
Dit zijn de drie die als eerste ertoe doen. Er zijn er nog negen voor de bevestigingsflow, het verbreken van de verbinding en MQTT 5.0-authenticatie. Laat de IDE de handlers genereren, want de parameterlijsten zijn lang en de eigenschapsobjecten verschillen per gebeurtenis.