From 37631730e0e5ea737edb36e8c542f21ae71ec0b9 Mon Sep 17 00:00:00 2001
From: christian <6939810+chkr1011@users.noreply.github.com>
Date: Mon, 20 Oct 2025 11:29:24 +0200
Subject: [PATCH] Enable nullable
---
Samples/MQTTnet.Samples.csproj | 1 +
.../MQTTnet.AspNetCore.csproj | 2 +
.../MQTTnet.Extensions.Rpc/IMqttRpcClient.cs | 9 +-
.../MQTTnet.Extensions.Rpc.csproj | 2 +
.../MQTTnet.Extensions.Rpc/MqttRpcClient.cs | 27 ++++--
.../MqttRpcClientExtensions.cs | 2 +-
.../MqttRpcTopicPair.cs | 4 +-
.../TopicGenerationContext.cs | 12 ++-
.../MQTTnet.Extensions.TopicTemplate.csproj | 2 +
.../ExchangeEnhancedAuthenticationOptions.cs | 6 +-
.../ExchangeEnhancedAuthenticationResult.cs | 6 +-
.../Events/ClientConnectedEventArgs.cs | 14 +--
.../Events/ClientDisconnectedEventArgs.cs | 12 +--
.../Internal/Adapter/MqttTcpServerAdapter.cs | 2 +-
.../Internal/Adapter/MqttTcpServerListener.cs | 4 +-
.../Internal/MqttClientSessionsManager.cs | 2 +-
Source/MQTTnet.Server/MQTTnet.Server.csproj | 3 +-
Source/MQTTnet.Server/MqttServerExtensions.cs | 2 +-
.../Options/MqttServerOptionsBuilder.cs | 4 +-
Source/MQTTnet.Server/SubscribeResponse.cs | 4 +-
Source/MQTTnet.Server/UnsubscribeResponse.cs | 4 +-
Source/MQTTnet.TestApp/MQTTnet.TestApp.csproj | 2 +
Source/MQTTnet.Tests/MQTTnet.Tests.csproj | 2 +
Source/MQTTnet/Adapter/IMqttChannelAdapter.cs | 6 +-
.../Adapter/IMqttClientAdapterFactory.cs | 2 +-
Source/MQTTnet/Adapter/MqttChannelAdapter.cs | 10 +-
Source/MQTTnet/Adapter/MqttPacketInspector.cs | 4 +-
.../Certificates/BlobCertificateProvider.cs | 2 +-
Source/MQTTnet/Channel/IMqttChannel.cs | 5 +-
.../Connecting/MqttClientConnectResult.cs | 14 +--
.../Diagnostics/Logger/IMqttNetLogger.cs | 2 +-
.../Diagnostics/Logger/MqttNetEventLogger.cs | 12 +--
.../Diagnostics/Logger/MqttNetLogMessage.cs | 8 +-
.../Diagnostics/Logger/MqttNetNullLogger.cs | 2 +-
.../Diagnostics/Logger/MqttNetSourceLogger.cs | 2 +-
.../MqttClientDisconnectOptions.cs | 4 +-
.../MqttClientDisconnectOptionsBuilder.cs | 4 +-
.../MqttClientDisconnectedEventArgs.cs | 16 ++--
...ntUnexpectedDisconnectReceivedException.cs | 8 +-
.../Exceptions/MqttCommunicationException.cs | 4 +-
.../MQTTnet/Formatter/IMqttPacketFormatter.cs | 2 +-
Source/MQTTnet/Formatter/MqttBufferReader.cs | 2 +-
Source/MQTTnet/Formatter/MqttBufferWriter.cs | 4 +-
Source/MQTTnet/Formatter/MqttPacketBuffer.cs | 2 +-
.../Formatter/MqttPacketFormatterAdapter.cs | 10 +-
.../Formatter/MqttUnsubscribePacketFactory.cs | 5 +-
.../Formatter/V3/MqttV3PacketFormatter.cs | 34 +++----
.../Formatter/V5/MqttV5PacketDecoder.cs | 30 +++---
.../Formatter/V5/MqttV5PacketEncoder.cs | 10 +-
.../Formatter/V5/MqttV5PacketFormatter.cs | 2 +-
.../Formatter/V5/MqttV5PropertiesReader.cs | 2 +-
.../Formatter/V5/MqttV5PropertiesWriter.cs | 35 +++----
Source/MQTTnet/IMqttClient.cs | 2 +-
.../Implementations/CrossPlatformSocket.cs | 12 +--
.../MqttClientAdapterFactory.cs | 2 +-
.../MQTTnet/Implementations/MqttTcpChannel.cs | 36 +++----
.../Implementations/MqttWebSocketChannel.cs | 24 ++---
.../MQTTnet/Internal/AsyncEventInvocator.cs | 6 +-
Source/MQTTnet/Internal/AsyncQueue.cs | 2 +-
.../Internal/AsyncQueueDequeueResult.cs | 2 +-
Source/MQTTnet/Internal/AsyncSignal.cs | 2 +-
Source/MQTTnet/Internal/BlockingQueue.cs | 2 +-
Source/MQTTnet/Internal/MqttPacketBus.cs | 2 +-
Source/MQTTnet/Internal/MqttPacketBusItem.cs | 11 +--
Source/MQTTnet/Internal/TaskExtensions.cs | 6 +-
.../LowLevelClient/LowLevelMqttClient.cs | 4 +-
Source/MQTTnet/MQTTnet.csproj | 2 +
Source/MQTTnet/MqttApplicationMessage.cs | 12 +--
.../MQTTnet/MqttApplicationMessageBuilder.cs | 24 ++---
.../MqttApplicationMessageExtensions.cs | 2 +-
Source/MQTTnet/MqttClient.cs | 94 +++++++++----------
Source/MQTTnet/MqttClientExtensions.cs | 10 +-
Source/MQTTnet/MqttTopicFilterBuilder.cs | 2 +-
.../DefaultMqttCertificatesProvider.cs | 8 +-
.../Options/IMqttClientChannelOptions.cs | 2 +-
.../Options/IMqttClientCredentialsProvider.cs | 2 +-
...MqttClientCertificateSelectionEventArgs.cs | 13 ++-
...qttClientCertificateValidationEventArgs.cs | 6 +-
.../MQTTnet/Options/MqttClientCredentials.cs | 6 +-
...ientDefaultCertificateValidationHandler.cs | 2 +-
Source/MQTTnet/Options/MqttClientOptions.cs | 24 ++---
.../Options/MqttClientOptionsBuilder.cs | 36 +++----
.../MQTTnet/Options/MqttClientTcpOptions.cs | 4 +-
.../MQTTnet/Options/MqttClientTlsOptions.cs | 14 +--
.../Options/MqttClientWebSocketOptions.cs | 16 ++--
.../MqttClientWebSocketOptionsBuilder.cs | 11 ++-
.../MqttClientWebSocketProxyOptions.cs | 10 +-
.../MqttEnhancedAuthenticationEventArgs.cs | 8 +-
.../MqttEnhancedAuthenticationExchangeData.cs | 6 +-
...iveMqttEnhancedAuthenticationDataResult.cs | 8 +-
...ndMqttEnhancedAuthenticationDataOptions.cs | 6 +-
.../MqttPacketAwaitableFilter.cs | 4 +-
Source/MQTTnet/Packets/MqttAuthPacket.cs | 8 +-
Source/MQTTnet/Packets/MqttConnAckPacket.cs | 14 +--
Source/MQTTnet/Packets/MqttConnectPacket.cs | 24 ++---
.../MQTTnet/Packets/MqttDisconnectPacket.cs | 6 +-
Source/MQTTnet/Packets/MqttPubAckPacket.cs | 4 +-
Source/MQTTnet/Packets/MqttPubCompPacket.cs | 4 +-
Source/MQTTnet/Packets/MqttPubRecPacket.cs | 4 +-
Source/MQTTnet/Packets/MqttPubRelPacket.cs | 4 +-
Source/MQTTnet/Packets/MqttPublishPacket.cs | 12 +--
Source/MQTTnet/Packets/MqttSubAckPacket.cs | 8 +-
Source/MQTTnet/Packets/MqttSubscribePacket.cs | 2 +-
Source/MQTTnet/Packets/MqttTopicFilter.cs | 2 +-
Source/MQTTnet/Packets/MqttUnsubAckPacket.cs | 8 +-
.../MQTTnet/Packets/MqttUnsubscribePacket.cs | 6 +-
Source/MQTTnet/Packets/MqttUserProperty.cs | 4 +-
.../Publishing/MqttClientPublishResult.cs | 4 +-
.../MqttClientPublishResultFactory.cs | 4 +-
...MqttApplicationMessageReceivedEventArgs.cs | 4 +-
.../Subscribing/MqttClientSubscribeOptions.cs | 2 +-
.../Subscribing/MqttClientSubscribeResult.cs | 4 +-
.../MqttClientSubscribeResultFactory.cs | 4 +-
.../MqttClientUnsubscribeOptions.cs | 2 +-
.../MqttClientUnsubscribeResult.cs | 4 +-
.../MqttClientUnsubscribeResultFactory.cs | 6 +-
116 files changed, 497 insertions(+), 463 deletions(-)
diff --git a/Samples/MQTTnet.Samples.csproj b/Samples/MQTTnet.Samples.csproj
index 5fe84d38..223adae1 100644
--- a/Samples/MQTTnet.Samples.csproj
+++ b/Samples/MQTTnet.Samples.csproj
@@ -15,6 +15,7 @@
true
low
latest-Recommended
+ default
diff --git a/Source/MQTTnet.AspnetCore/MQTTnet.AspNetCore.csproj b/Source/MQTTnet.AspnetCore/MQTTnet.AspNetCore.csproj
index ae4708a2..41302e91 100644
--- a/Source/MQTTnet.AspnetCore/MQTTnet.AspNetCore.csproj
+++ b/Source/MQTTnet.AspnetCore/MQTTnet.AspNetCore.csproj
@@ -39,6 +39,8 @@
low
latest-Recommended
true
+ default
+ enable
diff --git a/Source/MQTTnet.Extensions.Rpc/IMqttRpcClient.cs b/Source/MQTTnet.Extensions.Rpc/IMqttRpcClient.cs
index 84846071..123dad38 100644
--- a/Source/MQTTnet.Extensions.Rpc/IMqttRpcClient.cs
+++ b/Source/MQTTnet.Extensions.Rpc/IMqttRpcClient.cs
@@ -12,7 +12,12 @@ namespace MQTTnet.Extensions.Rpc;
public interface IMqttRpcClient : IDisposable
{
- Task ExecuteAsync(TimeSpan timeout, string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary parameters = null);
+ Task ExecuteAsync(TimeSpan timeout, string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary? parameters = null);
- Task ExecuteAsync(string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary parameters = null, CancellationToken cancellationToken = default);
+ Task ExecuteAsync(
+ string methodName,
+ byte[] payload,
+ MqttQualityOfServiceLevel qualityOfServiceLevel,
+ IDictionary? parameters = null,
+ CancellationToken cancellationToken = default);
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Extensions.Rpc/MQTTnet.Extensions.Rpc.csproj b/Source/MQTTnet.Extensions.Rpc/MQTTnet.Extensions.Rpc.csproj
index 41a84f4e..213af24e 100644
--- a/Source/MQTTnet.Extensions.Rpc/MQTTnet.Extensions.Rpc.csproj
+++ b/Source/MQTTnet.Extensions.Rpc/MQTTnet.Extensions.Rpc.csproj
@@ -37,6 +37,8 @@
low
latest-Recommended
true
+ default
+ enable
diff --git a/Source/MQTTnet.Extensions.Rpc/MqttRpcClient.cs b/Source/MQTTnet.Extensions.Rpc/MqttRpcClient.cs
index fc83bff1..4690e4ff 100644
--- a/Source/MQTTnet.Extensions.Rpc/MqttRpcClient.cs
+++ b/Source/MQTTnet.Extensions.Rpc/MqttRpcClient.cs
@@ -20,7 +20,7 @@ public sealed class MqttRpcClient : IMqttRpcClient
readonly IMqttClient _mqttClient;
readonly MqttRpcClientOptions _options;
- readonly ConcurrentDictionary> _waitingCalls = new ConcurrentDictionary>();
+ readonly ConcurrentDictionary> _waitingCalls = new();
public MqttRpcClient(IMqttClient mqttClient, MqttRpcClientOptions options)
{
@@ -42,7 +42,12 @@ public sealed class MqttRpcClient : IMqttRpcClient
_waitingCalls.Clear();
}
- public async Task ExecuteAsync(TimeSpan timeout, string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary parameters = null)
+ public async Task ExecuteAsync(
+ TimeSpan timeout,
+ string methodName,
+ byte[] payload,
+ MqttQualityOfServiceLevel qualityOfServiceLevel,
+ IDictionary? parameters = null)
{
using var timeoutToken = new CancellationTokenSource(timeout);
try
@@ -60,7 +65,12 @@ public sealed class MqttRpcClient : IMqttRpcClient
}
}
- public async Task ExecuteAsync(string methodName, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary parameters = null, CancellationToken cancellationToken = default)
+ public async Task ExecuteAsync(
+ string methodName,
+ byte[] payload,
+ MqttQualityOfServiceLevel qualityOfServiceLevel,
+ IDictionary? parameters = null,
+ CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(methodName);
@@ -82,7 +92,7 @@ public sealed class MqttRpcClient : IMqttRpcClient
var requestMessageBuilder = new MqttApplicationMessageBuilder().WithTopic(requestTopic).WithPayload(payload).WithQualityOfServiceLevel(qualityOfServiceLevel);
- if (_mqttClient.Options.ProtocolVersion == MqttProtocolVersion.V500)
+ if (_mqttClient.Options!.ProtocolVersion == MqttProtocolVersion.V500)
{
requestMessageBuilder.WithResponseTopic(responseTopic);
}
@@ -103,11 +113,10 @@ public sealed class MqttRpcClient : IMqttRpcClient
await _mqttClient.SubscribeAsync(subscribeOptions, cancellationToken).ConfigureAwait(false);
await _mqttClient.PublishAsync(requestMessage, cancellationToken).ConfigureAwait(false);
- using (cancellationToken.Register(
- () =>
- {
- awaitable.TrySetCanceled();
- }))
+ using (cancellationToken.Register(() =>
+ {
+ awaitable.TrySetCanceled();
+ }))
{
return await awaitable.Task.ConfigureAwait(false);
}
diff --git a/Source/MQTTnet.Extensions.Rpc/MqttRpcClientExtensions.cs b/Source/MQTTnet.Extensions.Rpc/MqttRpcClientExtensions.cs
index bde8aefc..f8d3ecde 100644
--- a/Source/MQTTnet.Extensions.Rpc/MqttRpcClientExtensions.cs
+++ b/Source/MQTTnet.Extensions.Rpc/MqttRpcClientExtensions.cs
@@ -12,7 +12,7 @@ namespace MQTTnet.Extensions.Rpc;
public static class MqttRpcClientExtensions
{
- public static Task ExecuteAsync(this IMqttRpcClient client, TimeSpan timeout, string methodName, string payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary parameters = null)
+ public static Task ExecuteAsync(this IMqttRpcClient client, TimeSpan timeout, string methodName, string payload, MqttQualityOfServiceLevel qualityOfServiceLevel, IDictionary? parameters = null)
{
if (client == null) throw new ArgumentNullException(nameof(client));
diff --git a/Source/MQTTnet.Extensions.Rpc/MqttRpcTopicPair.cs b/Source/MQTTnet.Extensions.Rpc/MqttRpcTopicPair.cs
index 2cdf7ffc..f27dfa65 100644
--- a/Source/MQTTnet.Extensions.Rpc/MqttRpcTopicPair.cs
+++ b/Source/MQTTnet.Extensions.Rpc/MqttRpcTopicPair.cs
@@ -6,7 +6,7 @@ namespace MQTTnet.Extensions.Rpc;
public sealed class MqttRpcTopicPair
{
- public string RequestTopic { get; set; }
+ public required string RequestTopic { get; init; }
- public string ResponseTopic { get; set; }
+ public required string ResponseTopic { get; init; }
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Extensions.Rpc/TopicGenerationContext.cs b/Source/MQTTnet.Extensions.Rpc/TopicGenerationContext.cs
index 9559f638..519b05d8 100644
--- a/Source/MQTTnet.Extensions.Rpc/TopicGenerationContext.cs
+++ b/Source/MQTTnet.Extensions.Rpc/TopicGenerationContext.cs
@@ -10,8 +10,12 @@ namespace MQTTnet.Extensions.Rpc;
public sealed class TopicGenerationContext
{
- public TopicGenerationContext(IMqttClient mqttClient, MqttRpcClientOptions options, string methodName,
- IDictionary parameters, MqttQualityOfServiceLevel qualityOfServiceLevel)
+ public TopicGenerationContext(
+ IMqttClient mqttClient,
+ MqttRpcClientOptions options,
+ string methodName,
+ IDictionary? parameters,
+ MqttQualityOfServiceLevel qualityOfServiceLevel)
{
MethodName = methodName ?? throw new ArgumentNullException(nameof(methodName));
Parameters = parameters;
@@ -22,12 +26,12 @@ public sealed class TopicGenerationContext
public string MethodName { get; }
- public IDictionary Parameters { get; }
-
public IMqttClient MqttClient { get; }
public MqttRpcClientOptions Options { get; }
+ public IDictionary? Parameters { get; }
+
///
/// Gets or sets the quality of service level.
/// The Quality of Service (QoS) level is an agreement between the sender of a message and the receiver of a message
diff --git a/Source/MQTTnet.Extensions.TopicTemplate/MQTTnet.Extensions.TopicTemplate.csproj b/Source/MQTTnet.Extensions.TopicTemplate/MQTTnet.Extensions.TopicTemplate.csproj
index cef08d80..adcddc85 100644
--- a/Source/MQTTnet.Extensions.TopicTemplate/MQTTnet.Extensions.TopicTemplate.csproj
+++ b/Source/MQTTnet.Extensions.TopicTemplate/MQTTnet.Extensions.TopicTemplate.csproj
@@ -33,6 +33,8 @@
true
1591;NETSDK1138
true
+ default
+ enable
diff --git a/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationOptions.cs b/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationOptions.cs
index d832a96d..140d579c 100644
--- a/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationOptions.cs
+++ b/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationOptions.cs
@@ -8,9 +8,9 @@ namespace MQTTnet.Server.EnhancedAuthentication;
public sealed class ExchangeEnhancedAuthenticationOptions
{
- public byte[] AuthenticationData { get; set; }
+ public byte[]? AuthenticationData { get; set; }
- public string ReasonString { get; set; }
+ public string? ReasonString { get; set; }
- public List UserProperties { get; set; }
+ public List? UserProperties { get; set; }
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationResult.cs b/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationResult.cs
index 9b9d6ba9..b747ba17 100644
--- a/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationResult.cs
+++ b/Source/MQTTnet.Server/EnhancedAuthentication/ExchangeEnhancedAuthenticationResult.cs
@@ -4,9 +4,9 @@ namespace MQTTnet.Server.EnhancedAuthentication;
public sealed class ExchangeEnhancedAuthenticationResult
{
- public string ReasonString { get; set; }
+ public string? ReasonString { get; init; }
- public List UserProperties { get; set; }
+ public List? UserProperties { get; init; }
- public byte[] AuthenticationData { get; set; }
+ public byte[]? AuthenticationData { get; init; }
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Server/Events/ClientConnectedEventArgs.cs b/Source/MQTTnet.Server/Events/ClientConnectedEventArgs.cs
index 718ecb65..148f682f 100644
--- a/Source/MQTTnet.Server/Events/ClientConnectedEventArgs.cs
+++ b/Source/MQTTnet.Server/Events/ClientConnectedEventArgs.cs
@@ -22,15 +22,15 @@ public sealed class ClientConnectedEventArgs : EventArgs
SessionItems = sessionItems ?? throw new ArgumentNullException(nameof(sessionItems));
}
- public byte[] AuthenticationData => _connectPacket.AuthenticationData;
+ public byte[]? AuthenticationData => _connectPacket.AuthenticationData;
- public string AuthenticationMethod => _connectPacket.AuthenticationMethod;
+ public string? AuthenticationMethod => _connectPacket.AuthenticationMethod;
///
/// Gets the client identifier of the connected client.
/// Hint: This identifier needs to be unique over all used clients / devices on the broker to avoid connection issues.
///
- public string ClientId => _connectPacket.ClientId;
+ public string ClientId => _connectPacket.ClientId!;
///
/// Gets the endpoint of the connected client.
@@ -38,7 +38,7 @@ public sealed class ClientConnectedEventArgs : EventArgs
public EndPoint RemoteEndPoint { get; }
[Obsolete("Use RemoteEndPoint instead.")]
- public string Endpoint => RemoteEndPoint?.ToString();
+ public string? Endpoint => RemoteEndPoint?.ToString();
///
/// Gets the protocol version which is used by the connected client.
@@ -53,16 +53,16 @@ public sealed class ClientConnectedEventArgs : EventArgs
///
/// Gets the user name of the connected client.
///
- public string UserName => _connectPacket.Username;
+ public string? UserName => _connectPacket.Username;
///
/// Gets the password of the connected client.
///
- public string Password => Encoding.UTF8.GetString(_connectPacket.Password.AsSpan());
+ public string? Password => Encoding.UTF8.GetString(_connectPacket.Password.AsSpan());
///
/// Gets the user properties sent by the client.
/// MQTT 5.0.0+ feature.
///
- public List UserProperties => _connectPacket?.UserProperties;
+ public List? UserProperties => _connectPacket?.UserProperties;
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Server/Events/ClientDisconnectedEventArgs.cs b/Source/MQTTnet.Server/Events/ClientDisconnectedEventArgs.cs
index 9cb85202..783add3c 100644
--- a/Source/MQTTnet.Server/Events/ClientDisconnectedEventArgs.cs
+++ b/Source/MQTTnet.Server/Events/ClientDisconnectedEventArgs.cs
@@ -35,24 +35,24 @@ public sealed class ClientDisconnectedEventArgs : EventArgs
/// Gets the client identifier.
/// Hint: This identifier needs to be unique over all used clients / devices on the broker to avoid connection issues.
///
- public string ClientId => _connectPacket.ClientId;
+ public string ClientId => _connectPacket.ClientId!;
///
/// Gets the user name of the client.
///
- public string UserName => _connectPacket.Username;
+ public string? UserName => _connectPacket.Username;
///
/// Gets the password of the client.
///
- public string Password => Encoding.UTF8.GetString(_connectPacket.Password.AsSpan());
+ public string? Password => Encoding.UTF8.GetString(_connectPacket.Password.AsSpan());
public MqttClientDisconnectType DisconnectType { get; }
public EndPoint RemoteEndPoint { get; }
[Obsolete("Use RemoteEndPoint instead.")]
- public string Endpoint => RemoteEndPoint?.ToString();
+ public string? Endpoint => RemoteEndPoint?.ToString();
///
/// Gets the reason code sent by the client.
@@ -66,7 +66,7 @@ public sealed class ClientDisconnectedEventArgs : EventArgs
/// Only available for clean disconnects.
/// MQTT 5.0.0+ feature.
///
- public string ReasonString => _disconnectPacket?.ReasonString;
+ public string? ReasonString => _disconnectPacket?.ReasonString;
///
/// Gets the session expiry interval sent by the client.
@@ -85,5 +85,5 @@ public sealed class ClientDisconnectedEventArgs : EventArgs
/// Only available for clean disconnects.
/// MQTT 5.0.0+ feature.
///
- public List UserProperties => _disconnectPacket?.UserProperties;
+ public List? UserProperties => _disconnectPacket?.UserProperties;
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerAdapter.cs b/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerAdapter.cs
index 9c955a03..49f91aab 100644
--- a/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerAdapter.cs
+++ b/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerAdapter.cs
@@ -12,7 +12,7 @@ namespace MQTTnet.Server.Internal.Adapter;
public sealed class MqttTcpServerAdapter : IMqttServerAdapter
{
- readonly List _listeners = new List();
+ readonly List _listeners = new();
CancellationTokenSource _cancellationTokenSource;
diff --git a/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerListener.cs b/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerListener.cs
index e539dc60..0a51dcc1 100644
--- a/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerListener.cs
+++ b/Source/MQTTnet.Server/Internal/Adapter/MqttTcpServerListener.cs
@@ -165,8 +165,8 @@ public sealed class MqttTcpServerListener : IDisposable
async Task TryHandleClientConnectionAsync(CrossPlatformSocket clientSocket)
{
- Stream stream = null;
- EndPoint remoteEndPoint = null;
+ Stream? stream = null;
+ EndPoint? remoteEndPoint = null;
try
{
diff --git a/Source/MQTTnet.Server/Internal/MqttClientSessionsManager.cs b/Source/MQTTnet.Server/Internal/MqttClientSessionsManager.cs
index b4985bd2..7d47f4e9 100644
--- a/Source/MQTTnet.Server/Internal/MqttClientSessionsManager.cs
+++ b/Source/MQTTnet.Server/Internal/MqttClientSessionsManager.cs
@@ -667,7 +667,7 @@ public sealed class MqttClientSessionsManager : ISubscriptionChangedNotification
}
}
- async Task ReceiveConnectPacket(IMqttChannelAdapter channelAdapter, CancellationToken cancellationToken)
+ async Task ReceiveConnectPacket(IMqttChannelAdapter channelAdapter, CancellationToken cancellationToken)
{
try
{
diff --git a/Source/MQTTnet.Server/MQTTnet.Server.csproj b/Source/MQTTnet.Server/MQTTnet.Server.csproj
index b9cd0ca2..719cf6f3 100644
--- a/Source/MQTTnet.Server/MQTTnet.Server.csproj
+++ b/Source/MQTTnet.Server/MQTTnet.Server.csproj
@@ -35,9 +35,10 @@
true
low
enable
- disable
+ enable
latest-Recommended
true
+ default
diff --git a/Source/MQTTnet.Server/MqttServerExtensions.cs b/Source/MQTTnet.Server/MqttServerExtensions.cs
index 747a9dfb..496d0e77 100644
--- a/Source/MQTTnet.Server/MqttServerExtensions.cs
+++ b/Source/MQTTnet.Server/MqttServerExtensions.cs
@@ -21,7 +21,7 @@ public static class MqttServerExtensions
public static Task InjectApplicationMessage(
this MqttServer server,
string topic,
- string payload = null,
+ string? payload = null,
MqttQualityOfServiceLevel qualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,
bool retain = false)
{
diff --git a/Source/MQTTnet.Server/Options/MqttServerOptionsBuilder.cs b/Source/MQTTnet.Server/Options/MqttServerOptionsBuilder.cs
index 52035890..24bc6023 100644
--- a/Source/MQTTnet.Server/Options/MqttServerOptionsBuilder.cs
+++ b/Source/MQTTnet.Server/Options/MqttServerOptionsBuilder.cs
@@ -20,7 +20,7 @@ public class MqttServerOptionsBuilder
return _options;
}
- public MqttServerOptionsBuilder WithClientCertificate(RemoteCertificateValidationCallback validationCallback = null, bool checkCertificateRevocation = false)
+ public MqttServerOptionsBuilder WithClientCertificate(RemoteCertificateValidationCallback? validationCallback = null, bool checkCertificateRevocation = false)
{
_options.TlsEndpointOptions.ClientCertificateRequired = true;
_options.TlsEndpointOptions.CheckCertificateRevocation = checkCertificateRevocation;
@@ -183,7 +183,7 @@ public class MqttServerOptionsBuilder
return this;
}
- public MqttServerOptionsBuilder WithEncryptionCertificate(byte[] value, IMqttServerCertificateCredentials credentials = null)
+ public MqttServerOptionsBuilder WithEncryptionCertificate(byte[] value, IMqttServerCertificateCredentials? credentials = null)
{
ArgumentNullException.ThrowIfNull(value);
diff --git a/Source/MQTTnet.Server/SubscribeResponse.cs b/Source/MQTTnet.Server/SubscribeResponse.cs
index 00ebf402..10098e68 100644
--- a/Source/MQTTnet.Server/SubscribeResponse.cs
+++ b/Source/MQTTnet.Server/SubscribeResponse.cs
@@ -16,7 +16,7 @@ public sealed class SubscribeResponse
///
public MqttSubscribeReasonCode ReasonCode { get; set; }
- public string ReasonString { get; set; }
+ public string? ReasonString { get; set; }
- public List UserProperties { get; } = [];
+ public List? UserProperties { get; set; } = [];
}
\ No newline at end of file
diff --git a/Source/MQTTnet.Server/UnsubscribeResponse.cs b/Source/MQTTnet.Server/UnsubscribeResponse.cs
index 741d323d..e7d5d32c 100644
--- a/Source/MQTTnet.Server/UnsubscribeResponse.cs
+++ b/Source/MQTTnet.Server/UnsubscribeResponse.cs
@@ -15,7 +15,7 @@ public sealed class UnsubscribeResponse
///
public MqttUnsubscribeReasonCode ReasonCode { get; set; }
- public string ReasonString { get; set; }
+ public string? ReasonString { get; set; }
- public List UserProperties { get; } = [];
+ public List? UserProperties { get; } = [];
}
\ No newline at end of file
diff --git a/Source/MQTTnet.TestApp/MQTTnet.TestApp.csproj b/Source/MQTTnet.TestApp/MQTTnet.TestApp.csproj
index 68fc336b..2367b4a6 100644
--- a/Source/MQTTnet.TestApp/MQTTnet.TestApp.csproj
+++ b/Source/MQTTnet.TestApp/MQTTnet.TestApp.csproj
@@ -14,6 +14,8 @@
true
low
latest-Recommended
+ default
+ enable
diff --git a/Source/MQTTnet.Tests/MQTTnet.Tests.csproj b/Source/MQTTnet.Tests/MQTTnet.Tests.csproj
index e49348bc..e0ab60c5 100644
--- a/Source/MQTTnet.Tests/MQTTnet.Tests.csproj
+++ b/Source/MQTTnet.Tests/MQTTnet.Tests.csproj
@@ -14,6 +14,8 @@
true
low
latest-Recommended
+ default
+ enable
diff --git a/Source/MQTTnet/Adapter/IMqttChannelAdapter.cs b/Source/MQTTnet/Adapter/IMqttChannelAdapter.cs
index 9337354a..d7ae785e 100644
--- a/Source/MQTTnet/Adapter/IMqttChannelAdapter.cs
+++ b/Source/MQTTnet/Adapter/IMqttChannelAdapter.cs
@@ -18,9 +18,9 @@ public interface IMqttChannelAdapter : IDisposable
long BytesSent { get; }
- X509Certificate2 ClientCertificate { get; }
+ X509Certificate2? ClientCertificate { get; }
- EndPoint RemoteEndPoint { get; }
+ EndPoint? RemoteEndPoint { get; }
bool IsSecureConnection { get; }
@@ -30,7 +30,7 @@ public interface IMqttChannelAdapter : IDisposable
Task DisconnectAsync(CancellationToken cancellationToken);
- Task ReceivePacketAsync(CancellationToken cancellationToken);
+ Task ReceivePacketAsync(CancellationToken cancellationToken);
void ResetStatistics();
diff --git a/Source/MQTTnet/Adapter/IMqttClientAdapterFactory.cs b/Source/MQTTnet/Adapter/IMqttClientAdapterFactory.cs
index 3ea49381..49cf05f4 100644
--- a/Source/MQTTnet/Adapter/IMqttClientAdapterFactory.cs
+++ b/Source/MQTTnet/Adapter/IMqttClientAdapterFactory.cs
@@ -8,5 +8,5 @@ namespace MQTTnet.Adapter;
public interface IMqttClientAdapterFactory
{
- IMqttChannelAdapter CreateClientAdapter(MqttClientOptions options, MqttPacketInspector packetInspector, IMqttNetLogger logger);
+ IMqttChannelAdapter CreateClientAdapter(MqttClientOptions options, MqttPacketInspector? packetInspector, IMqttNetLogger logger);
}
\ No newline at end of file
diff --git a/Source/MQTTnet/Adapter/MqttChannelAdapter.cs b/Source/MQTTnet/Adapter/MqttChannelAdapter.cs
index 724d47df..f6f920ce 100644
--- a/Source/MQTTnet/Adapter/MqttChannelAdapter.cs
+++ b/Source/MQTTnet/Adapter/MqttChannelAdapter.cs
@@ -50,15 +50,15 @@ public sealed class MqttChannelAdapter : Disposable, IMqttChannelAdapter
public long BytesSent => Volatile.Read(ref _statistics._bytesSent);
- public X509Certificate2 ClientCertificate => _channel.ClientCertificate;
+ public X509Certificate2? ClientCertificate => _channel.ClientCertificate;
- public EndPoint RemoteEndPoint => _channel.RemoteEndPoint;
+ public EndPoint? RemoteEndPoint => _channel.RemoteEndPoint;
public bool IsSecureConnection => _channel.IsSecureConnection;
public MqttPacketFormatterAdapter PacketFormatterAdapter { get; }
- public MqttPacketInspector PacketInspector { get; set; }
+ public MqttPacketInspector? PacketInspector { get; set; }
public async Task ConnectAsync(CancellationToken cancellationToken)
{
@@ -73,7 +73,7 @@ public sealed class MqttChannelAdapter : Disposable, IMqttChannelAdapter
* block forever. Even a cancellation token is not supported properly.
*/
- var timeout = new TaskCompletionSource