diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index ddc97e2f..fec2497f 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -38,15 +38,7 @@ namespace MQTTnet.Client IMqttChannelAdapter _adapter; bool _cleanDisconnectInitiated; - volatile int _connectState; - - enum ConnectState - { - Disconnected = 0, - Disconnecting, - Connected, - Connecting - } + volatile int _connectionStatus; MqttClientDisconnectReason _disconnectReason; @@ -66,7 +58,7 @@ namespace MQTTnet.Client public IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler { get; set; } - public bool IsConnected => (ConnectState)_connectState == ConnectState.Connected; + public bool IsConnected => (MqttClientConnectionStatus)_connectionStatus == MqttClientConnectionStatus.Connected; public IMqttClientOptions Options { get; private set; } @@ -79,7 +71,7 @@ namespace MQTTnet.Client ThrowIfDisposed(); - if (CompareExchangeConnectState(ConnectState.Connecting, ConnectState.Disconnected) != ConnectState.Disconnected) + if (CompareExchangeConnectionStatus(MqttClientConnectionStatus.Connecting, MqttClientConnectionStatus.Disconnected) != MqttClientConnectionStatus.Disconnected) throw new InvalidOperationException("Not allowed to connect while connect/disconnect is pending."); MqttClientAuthenticateResult authenticateResult = null; @@ -118,7 +110,7 @@ namespace MQTTnet.Client _keepAlivePacketsSenderTask = Task.Run(() => TrySendKeepAliveMessagesAsync(backgroundCancellationToken), backgroundCancellationToken); } - CompareExchangeConnectState(ConnectState.Connected, ConnectState.Connecting); + CompareExchangeConnectionStatus(MqttClientConnectionStatus.Connected, MqttClientConnectionStatus.Connecting); _logger.Info("Connected."); @@ -370,7 +362,7 @@ namespace MQTTnet.Client { Cleanup(); _cleanDisconnectInitiated = false; - CompareExchangeConnectState(ConnectState.Disconnected, ConnectState.Disconnecting); + CompareExchangeConnectionStatus(MqttClientConnectionStatus.Disconnected, MqttClientConnectionStatus.Disconnecting); _logger.Info("Disconnected."); @@ -805,32 +797,32 @@ namespace MQTTnet.Client bool DisconnectIsPendingOrFinished() { - var connectState = (ConnectState)_connectState; + var connectionStatus = (MqttClientConnectionStatus)_connectionStatus; do { - switch (connectState) + switch (connectionStatus) { - case ConnectState.Disconnected: - case ConnectState.Disconnecting: + case MqttClientConnectionStatus.Disconnected: + case MqttClientConnectionStatus.Disconnecting: return true; - case ConnectState.Connected: - case ConnectState.Connecting: - // This will compare the _connectState to old value and set it to "CONNECT_STATED_DISCONNECTING" afterwards. + case MqttClientConnectionStatus.Connected: + case MqttClientConnectionStatus.Connecting: + // This will compare the _connectionStatus to old value and set it to "MqttClientConnectionStatus.Disconnecting" afterwards. // So the first caller will get a "false" and all subsequent ones will get "true". - var newState = CompareExchangeConnectState(ConnectState.Disconnecting, connectState); - if (newState == connectState) + var curStatus = CompareExchangeConnectionStatus(MqttClientConnectionStatus.Disconnecting, connectionStatus); + if (curStatus == connectionStatus) { return false; } - connectState = newState; + connectionStatus = curStatus; break; } } while (true); } - ConnectState CompareExchangeConnectState(ConnectState value, ConnectState comparand) + MqttClientConnectionStatus CompareExchangeConnectionStatus(MqttClientConnectionStatus value, MqttClientConnectionStatus comparand) { - return (ConnectState)Interlocked.CompareExchange(ref _connectState, (int)value, (int)comparand); + return (MqttClientConnectionStatus)Interlocked.CompareExchange(ref _connectionStatus, (int)value, (int)comparand); } } } \ No newline at end of file diff --git a/Source/MQTTnet/Client/MqttClientConnectionStatus.cs b/Source/MQTTnet/Client/MqttClientConnectionStatus.cs new file mode 100644 index 00000000..2410f7d6 --- /dev/null +++ b/Source/MQTTnet/Client/MqttClientConnectionStatus.cs @@ -0,0 +1,11 @@ +namespace MQTTnet.Client +{ + public enum MqttClientConnectionStatus + + { + Disconnected = 0, + Disconnecting, + Connected, + Connecting + } +} \ No newline at end of file