Added reason code to MqttClientDisconnectedEventArgs and use it.

This commit is contained in:
SeppPenner
2020-06-12 20:21:23 +02:00
parent 0a76ac15c6
commit df149eb0b3
2 changed files with 8 additions and 2 deletions
@@ -5,11 +5,12 @@ namespace MQTTnet.Client.Disconnecting
{ {
public class MqttClientDisconnectedEventArgs : EventArgs public class MqttClientDisconnectedEventArgs : EventArgs
{ {
public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult) public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult, MqttClientDisconnectReason reasonCode)
{ {
ClientWasConnected = clientWasConnected; ClientWasConnected = clientWasConnected;
Exception = exception; Exception = exception;
AuthenticateResult = authenticateResult; AuthenticateResult = authenticateResult;
ReasonCode = reasonCode;
} }
public bool ClientWasConnected { get; } public bool ClientWasConnected { get; }
@@ -17,5 +18,7 @@ namespace MQTTnet.Client.Disconnecting
public Exception Exception { get; } public Exception Exception { get; }
public MqttClientAuthenticateResult AuthenticateResult { get; } public MqttClientAuthenticateResult AuthenticateResult { get; }
public MqttClientDisconnectReason ReasonCode { get; set; } = MqttClientDisconnectReason.NormalDisconnection;
} }
} }
+4 -1
View File
@@ -309,6 +309,7 @@ namespace MQTTnet.Client
async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult) async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult)
{ {
var clientWasConnected = IsConnected; var clientWasConnected = IsConnected;
var reasonCode = MqttClientDisconnectReason.NormalDisconnection;
TryInitiateDisconnect(); TryInitiateDisconnect();
_isConnected = false; _isConnected = false;
@@ -326,6 +327,7 @@ namespace MQTTnet.Client
catch (Exception adapterException) catch (Exception adapterException)
{ {
_logger.Warning(adapterException, "Error while disconnecting from adapter."); _logger.Warning(adapterException, "Error while disconnecting from adapter.");
reasonCode = MqttClientDisconnectReason.UnspecifiedError;
} }
try try
@@ -341,6 +343,7 @@ namespace MQTTnet.Client
catch (Exception e) catch (Exception e)
{ {
_logger.Warning(e, "Error while waiting for internal tasks."); _logger.Warning(e, "Error while waiting for internal tasks.");
reasonCode = MqttClientDisconnectReason.ImplementationSpecificError;
} }
finally finally
{ {
@@ -354,7 +357,7 @@ namespace MQTTnet.Client
{ {
// This handler must be executed in a new thread because otherwise a dead lock may happen // This handler must be executed in a new thread because otherwise a dead lock may happen
// when trying to reconnect in that handler etc. // 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);
} }
} }
} }