Nell'evento OnMQTTBeforeConnect, c'è un parametro chiamato aCleanSession. Se il valore di questo parametro è True, significa che il client vuole avviare una nuova sessione, quindi se il server ha una sessione memorizzata, deve eliminarla. Pertanto, quando viene generato l'evento OnMQTTConnect, il parametro aSession sarà false. Se il valore di questo parametro è False e c'è una sessione associata a questo identificatore client, il server deve riprendere le comunicazioni con il client nello stato della sessione esistente.
Pertanto, se il client subisce una disconnessione imprevista e si desidera ripristinare la sessione nel punto in cui è avvenuta la disconnessione, in OnMQTTBeforeConnect impostare aCleanSession = True e aClientIdentifier = Client ID of Session.
Dopo la connessione avvenuta con successo, verificare l'evento OnMQTTConnect e il valore del parametro Session.
Session = true, significa che la sessione è stata ripresa.
Session = false, significa che si tratta di una nuova sessione.
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;