OnMQTTBeforeConnect 事件中有一个名为 aCleanSession 的参数。若此参数值为 True,表示客户端希望开始新会话,因此若服务器存储了任何会话,则必须丢弃。此时,当 OnMQTTConnect 事件触发时,aSession 参数将为 false。若此参数值为 False,且存在与此客户端标识符关联的会话,则服务器必须从现有会话的状态恢复与客户端的通信。
因此,如果客户端发生意外断线,而您希望恢复断线前的会话,请在 OnMQTTBeforeConnect 中将 aCleanSession = True 和 aClientIdentifier = 会话的客户端 ID。
连接成功后,检查 OnMQTTConnect 事件中 Session 参数的值。
Session = true,表示会话已恢复。
Session = false,表示这是一个新会话。
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;