TsgcWSPClient_MQTT | 客户端 MQTT 会话

Clean Start

OnMQTTBeforeConnect 事件中有一个名为 aCleanSession 的参数。若此参数值为 True,表示客户端希望开始新会话,因此若服务器存储了任何会话,则必须丢弃。此时,当 OnMQTTConnect 事件触发时,aSession 参数将为 false。若此参数值为 False,且存在与此客户端标识符关联的会话,则服务器必须从现有会话的状态恢复与客户端的通信。

 

因此,如果客户端发生意外断线,而您希望恢复断线前的会话,请在 OnMQTTBeforeConnect 中将 aCleanSession = TrueaClientIdentifier = 会话的客户端 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;