diff --git a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs index 7658e157..24b45345 100644 --- a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs +++ b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs @@ -5,11 +5,12 @@ namespace MQTTnet.Client.Disconnecting { public class MqttClientDisconnectedEventArgs : EventArgs { - public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult) + public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult, MqttClientDisconnectReason reasonCode) { ClientWasConnected = clientWasConnected; Exception = exception; AuthenticateResult = authenticateResult; + ReasonCode = reasonCode; } public bool ClientWasConnected { get; } @@ -17,5 +18,7 @@ namespace MQTTnet.Client.Disconnecting public Exception Exception { get; } public MqttClientAuthenticateResult AuthenticateResult { get; } + + public MqttClientDisconnectReason ReasonCode { get; set; } = MqttClientDisconnectReason.NormalDisconnection; } } diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index da7d6e66..fc36eff3 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -309,6 +309,7 @@ namespace MQTTnet.Client async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult) { var clientWasConnected = IsConnected; + var reasonCode = MqttClientDisconnectReason.NormalDisconnection; TryInitiateDisconnect(); _isConnected = false; @@ -326,6 +327,7 @@ namespace MQTTnet.Client catch (Exception adapterException) { _logger.Warning(adapterException, "Error while disconnecting from adapter."); + reasonCode = MqttClientDisconnectReason.UnspecifiedError; } try @@ -341,6 +343,7 @@ namespace MQTTnet.Client catch (Exception e) { _logger.Warning(e, "Error while waiting for internal tasks."); + reasonCode = MqttClientDisconnectReason.ImplementationSpecificError; } finally { @@ -354,7 +357,7 @@ namespace MQTTnet.Client { // This handler must be executed in a new thread because otherwise a dead lock may happen // when trying to reconnect in that handler etc. - Task.Run(() => disconnectedHandler.HandleDisconnectedAsync(new MqttClientDisconnectedEventArgs(clientWasConnected, exception, authenticateResult))).Forget(_logger); + Task.Run(() => disconnectedHandler.HandleDisconnectedAsync(new MqttClientDisconnectedEventArgs(clientWasConnected, exception, authenticateResult, reasonCode))).Forget(_logger); } } }