1724 nullreferenceexception on mqttclientconnectasync (#1748)

Update MqttClient.cs
This commit is contained in:
Christian
2023-05-29 13:55:36 +02:00
committed by GitHub
parent caa717544b
commit d8e5936d45
+7 -7
View File
@@ -121,11 +121,11 @@ namespace MQTTnet.Client
var mqttClientAliveToken = _mqttClientAlive.Token; var mqttClientAliveToken = _mqttClientAlive.Token;
var adapter = _adapterFactory.CreateClientAdapter(options, new MqttPacketInspector(_events.InspectPacketEvent, _rootLogger), _rootLogger); var adapter = _adapterFactory.CreateClientAdapter(options, new MqttPacketInspector(_events.InspectPacketEvent, _rootLogger), _rootLogger);
_adapter = adapter; _adapter = adapter ?? throw new InvalidOperationException("The adapter factory did not provide an adapter.");
if (cancellationToken.CanBeCanceled) if (cancellationToken.CanBeCanceled)
{ {
connectResult = await ConnectInternal(cancellationToken).ConfigureAwait(false); connectResult = await ConnectInternal(adapter, cancellationToken).ConfigureAwait(false);
} }
else else
{ {
@@ -133,7 +133,7 @@ namespace MQTTnet.Client
// CancellationToken.None or similar. // CancellationToken.None or similar.
using (var timeout = new CancellationTokenSource(Options.Timeout)) using (var timeout = new CancellationTokenSource(Options.Timeout))
{ {
connectResult = await ConnectInternal(timeout.Token).ConfigureAwait(false); connectResult = await ConnectInternal(adapter, timeout.Token).ConfigureAwait(false);
} }
} }
@@ -421,7 +421,7 @@ namespace MQTTnet.Client
return CompletedTask.Instance; return CompletedTask.Instance;
} }
async Task<MqttClientConnectResult> Authenticate(MqttClientOptions options, CancellationToken cancellationToken) async Task<MqttClientConnectResult> Authenticate(IMqttChannelAdapter channelAdapter, MqttClientOptions options, CancellationToken cancellationToken)
{ {
MqttClientConnectResult result; MqttClientConnectResult result;
@@ -435,7 +435,7 @@ namespace MQTTnet.Client
if (receivedPacket is MqttConnAckPacket connAckPacket) if (receivedPacket is MqttConnAckPacket connAckPacket)
{ {
var clientConnectResultFactory = new MqttClientConnectResultFactory(); var clientConnectResultFactory = new MqttClientConnectResultFactory();
result = clientConnectResultFactory.Create(connAckPacket, _adapter.PacketFormatterAdapter.ProtocolVersion); result = clientConnectResultFactory.Create(connAckPacket, channelAdapter.PacketFormatterAdapter.ProtocolVersion);
} }
else else
{ {
@@ -484,7 +484,7 @@ namespace MQTTnet.Client
return (MqttClientConnectionStatus)Interlocked.CompareExchange(ref _connectionStatus, (int)value, (int)comparand); return (MqttClientConnectionStatus)Interlocked.CompareExchange(ref _connectionStatus, (int)value, (int)comparand);
} }
async Task<MqttClientConnectResult> ConnectInternal(CancellationToken cancellationToken) async Task<MqttClientConnectResult> ConnectInternal(IMqttChannelAdapter channelAdapter, CancellationToken cancellationToken)
{ {
var backgroundCancellationToken = _mqttClientAlive.Token; var backgroundCancellationToken = _mqttClientAlive.Token;
@@ -497,7 +497,7 @@ namespace MQTTnet.Client
_publishPacketReceiverQueue?.Dispose(); _publishPacketReceiverQueue?.Dispose();
_publishPacketReceiverQueue = new AsyncQueue<MqttPublishPacket>(); _publishPacketReceiverQueue = new AsyncQueue<MqttPublishPacket>();
var connectResult = await Authenticate(Options, effectiveCancellationToken.Token).ConfigureAwait(false); var connectResult = await Authenticate(channelAdapter, Options, effectiveCancellationToken.Token).ConfigureAwait(false);
_publishPacketReceiverTask = Task.Run(() => ProcessReceivedPublishPackets(backgroundCancellationToken), backgroundCancellationToken); _publishPacketReceiverTask = Task.Run(() => ProcessReceivedPublishPackets(backgroundCancellationToken), backgroundCancellationToken);
_packetReceiverTask = Task.Run(() => ReceivePacketsLoop(backgroundCancellationToken), backgroundCancellationToken); _packetReceiverTask = Task.Run(() => ReceivePacketsLoop(backgroundCancellationToken), backgroundCancellationToken);