More options for disconnect (#1557)

* Expose more options in disconnect options.

* Expose more options in disconnect API.

* Refactor code.

* Expose user properties in disconnected event.

* Expose more disconnect options in server.

* Fix build errors

* Add new samples.

* Fix client cleanup

* Fix merge conflicts
This commit is contained in:
Christian
2022-12-23 17:09:02 +01:00
committed by GitHub
parent abe7bbda15
commit fdf00f1b18
28 changed files with 752 additions and 366 deletions
+39 -8
View File
@@ -14,20 +14,28 @@ namespace MQTTnet.Client
{
public static class MqttClientExtensions
{
public static Task DisconnectAsync(this IMqttClient client, MqttClientDisconnectReason reason = MqttClientDisconnectReason.NormalDisconnection, string reasonString = null)
public static Task DisconnectAsync(
this IMqttClient client,
MqttClientDisconnectOptionsReason reason = MqttClientDisconnectOptionsReason.NormalDisconnection,
string reasonString = null,
uint sessionExpiryInterval = 0,
List<MqttUserProperty> userProperties = null,
CancellationToken cancellationToken = default)
{
if (client == null)
{
throw new ArgumentNullException(nameof(client));
}
return client.DisconnectAsync(
new MqttClientDisconnectOptions
{
Reason = reason,
ReasonString = reasonString
},
CancellationToken.None);
var disconnectOptions = new MqttClientDisconnectOptions
{
Reason = reason,
ReasonString = reasonString,
SessionExpiryInterval = sessionExpiryInterval,
UserProperties = userProperties
};
return client.DisconnectAsync(disconnectOptions, cancellationToken);
}
public static Task<MqttClientPublishResult> PublishBinaryAsync(
@@ -128,6 +136,29 @@ namespace MQTTnet.Client
return mqttClient.SubscribeAsync(subscribeOptions, cancellationToken);
}
public static async Task<bool> TryDisconnectAsync(
this IMqttClient client,
MqttClientDisconnectOptionsReason reason = MqttClientDisconnectOptionsReason.NormalDisconnection,
string reasonString = null)
{
if (client == null)
{
throw new ArgumentNullException(nameof(client));
}
try
{
await client.DisconnectAsync(reason, reasonString).ConfigureAwait(false);
return true;
}
catch
{
// Ignore all errors.
}
return false;
}
public static async Task<bool> TryPingAsync(this IMqttClient client, CancellationToken cancellationToken = default)
{
if (client == null)