OnMQTTBeforeConnect, há um parâmetro chamado aCleanSession. Se o valor deste parâmetro for True, significa que o cliente quer iniciar uma nova sessão, portanto, se o servidor tiver alguma sessão armazenada, ele deve descartá-la. Assim, quando o evento OnMQTTConnect é disparado, o parâmetro aSession será false. Se o valor deste parâmetro for False e houver uma sessão associada a este client identifier, o servidor deve retomar as comunicações com o cliente no estado da sessão existente.
Portanto, se o cliente tiver uma desconexão inesperada, e você quiser recuperar a sessão de onde foi desconectado, em OnMQTTBeforeConnect defina aCleanSession = True e aClientIdentifier = Client ID da Sessão.
Após uma conexão bem-sucedida, verifique o evento OnMQTTConnect, o valor do parâmetro Session.
Session = true, significa que a sessão foi retomada.
Session = false, significa que é uma nova sessão.
procedure TfrmWebSocketClient.MQTTMQTTBeforeConnect(Connection: TsgcWSConnection;
var aCleanSession: Boolean; var aClientIdentifier: string);
begin
aCleanSession := false;
aClientIdentifier := 'previous client id';
end;
procedure OnMQTTConnect(Connection: TsgcWSConnection; const Session: Boolean;
const ReasonCode: Integer; const ReasonName: string; const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
if Session then
WriteLn('Session resumed')
else
WriteLn('New Session');
end;