Rename MqttClient.ConnectState to MqttClientConnectionStatus

This commit is contained in:
SilverFox
2021-04-03 13:19:50 +08:00
parent d913d4402e
commit 899ed7b1da
2 changed files with 28 additions and 25 deletions
+17 -25
View File
@@ -38,15 +38,7 @@ namespace MQTTnet.Client
IMqttChannelAdapter _adapter; IMqttChannelAdapter _adapter;
bool _cleanDisconnectInitiated; bool _cleanDisconnectInitiated;
volatile int _connectState; volatile int _connectionStatus;
enum ConnectState
{
Disconnected = 0,
Disconnecting,
Connected,
Connecting
}
MqttClientDisconnectReason _disconnectReason; MqttClientDisconnectReason _disconnectReason;
@@ -66,7 +58,7 @@ namespace MQTTnet.Client
public IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler { get; set; } 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; } public IMqttClientOptions Options { get; private set; }
@@ -79,7 +71,7 @@ namespace MQTTnet.Client
ThrowIfDisposed(); 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."); throw new InvalidOperationException("Not allowed to connect while connect/disconnect is pending.");
MqttClientAuthenticateResult authenticateResult = null; MqttClientAuthenticateResult authenticateResult = null;
@@ -118,7 +110,7 @@ namespace MQTTnet.Client
_keepAlivePacketsSenderTask = Task.Run(() => TrySendKeepAliveMessagesAsync(backgroundCancellationToken), backgroundCancellationToken); _keepAlivePacketsSenderTask = Task.Run(() => TrySendKeepAliveMessagesAsync(backgroundCancellationToken), backgroundCancellationToken);
} }
CompareExchangeConnectState(ConnectState.Connected, ConnectState.Connecting); CompareExchangeConnectionStatus(MqttClientConnectionStatus.Connected, MqttClientConnectionStatus.Connecting);
_logger.Info("Connected."); _logger.Info("Connected.");
@@ -370,7 +362,7 @@ namespace MQTTnet.Client
{ {
Cleanup(); Cleanup();
_cleanDisconnectInitiated = false; _cleanDisconnectInitiated = false;
CompareExchangeConnectState(ConnectState.Disconnected, ConnectState.Disconnecting); CompareExchangeConnectionStatus(MqttClientConnectionStatus.Disconnected, MqttClientConnectionStatus.Disconnecting);
_logger.Info("Disconnected."); _logger.Info("Disconnected.");
@@ -805,32 +797,32 @@ namespace MQTTnet.Client
bool DisconnectIsPendingOrFinished() bool DisconnectIsPendingOrFinished()
{ {
var connectState = (ConnectState)_connectState; var connectionStatus = (MqttClientConnectionStatus)_connectionStatus;
do do
{ {
switch (connectState) switch (connectionStatus)
{ {
case ConnectState.Disconnected: case MqttClientConnectionStatus.Disconnected:
case ConnectState.Disconnecting: case MqttClientConnectionStatus.Disconnecting:
return true; return true;
case ConnectState.Connected: case MqttClientConnectionStatus.Connected:
case ConnectState.Connecting: case MqttClientConnectionStatus.Connecting:
// This will compare the _connectState to old value and set it to "CONNECT_STATED_DISCONNECTING" afterwards. // 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". // So the first caller will get a "false" and all subsequent ones will get "true".
var newState = CompareExchangeConnectState(ConnectState.Disconnecting, connectState); var curStatus = CompareExchangeConnectionStatus(MqttClientConnectionStatus.Disconnecting, connectionStatus);
if (newState == connectState) if (curStatus == connectionStatus)
{ {
return false; return false;
} }
connectState = newState; connectionStatus = curStatus;
break; break;
} }
} while (true); } 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);
} }
} }
} }
@@ -0,0 +1,11 @@
namespace MQTTnet.Client
{
public enum MqttClientConnectionStatus
{
Disconnected = 0,
Disconnecting,
Connected,
Connecting
}
}