QuickStart
Conectar, assinar, publicar
Ligue o protocolo a um cliente, abra a conexão, assine um tópico e publique nele. A mensagem volta em 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 puro sobre TCP em vez de sobre WebSockets, crie um TsgcTCPClient de sgcTCP_Client_WS e aponte MQTT.Client para ele. Nada mais muda, e esse é o motivo de os dois componentes serem separados.
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 retorna um Word, o identificador do pacote, e não espera. PublishAndWait retorna um Boolean e bloqueia até o broker confirmar, com um timeout que por padrão é de dez segundos. TmqttQoS vem 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;
Estes são os três que mais importam no início. Existem outros nove para o fluxo de confirmação, a desconexão e a autenticação do MQTT 5.0. Deixe a IDE gerar os manipuladores, porque as listas de parâmetros são longas e os objetos de propriedades diferem por evento.