QuickStart
Se connecter, souscrire, publier
Relie le protocole à un client, ouvre la connexion, souscris à un topic et publie dessus. Le message revient sur 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;
Pour du MQTT simple sur TCP plutôt que sur WebSockets, crée plutôt un TsgcTCPClient depuis sgcTCP_Client_WS et pointe MQTT.Client vers lui. Rien d'autre ne change, et c'est la raison pour laquelle les deux composants sont séparés.
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 renvoie un Word, l'identifiant du paquet, et n'attend pas. PublishAndWait renvoie un Boolean et bloque jusqu'à ce que le broker confirme, avec un délai d'expiration de dix secondes par défaut. TmqttQoS provient de 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;
Ce sont les trois qui comptent d'abord. Neuf autres existent pour le flux d'accusés de réception, la déconnexion et l'authentification MQTT 5.0. Laisse l'IDE générer les gestionnaires, car les listes de paramètres sont longues et les objets de propriétés diffèrent selon l'événement.