QuickStart
Conectar, suscribirse, publicar
Conecta el protocolo a un cliente, abre la conexión, suscríbete a un topic y publica en él. El mensaje vuelve en 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;
Para MQTT normal sobre TCP en lugar de sobre WebSockets, crea en su lugar un TsgcTCPClient de sgcTCP_Client_WS y apunta MQTT.Client a ese. Nada más cambia, y esa es la razón por la que los dos componentes son independientes.
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 devuelve un Word, el identificador del paquete, y no espera. PublishAndWait devuelve un Boolean y bloquea hasta que el broker confirma, con un timeout que por defecto es de diez segundos. TmqttQoS procede 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;
Estos son los tres que importan primero. Existen nueve más para el flujo de confirmaciones, la desconexión y la autenticación de MQTT 5.0. Deja que el IDE genere los manejadores, porque las listas de parámetros son largas y los objetos de propiedades cambian según el evento.