Fix breaking changes.

This commit is contained in:
Christian Kratky
2017-06-03 22:48:22 +02:00
parent 1317fa3e2a
commit 929cdb971a
92 changed files with 1363 additions and 1309 deletions
+9 -3
View File
@@ -67,7 +67,9 @@ namespace MQTTnet.Core.Client
_packetDispatcher.Reset();
IsConnected = true;
Task.Run(() => ReceivePackets(_cancellationTokenSource.Token), _cancellationTokenSource.Token).Forget();
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
Task.Run(() => ReceivePackets(_cancellationTokenSource.Token), _cancellationTokenSource.Token);
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
var response = await SendAndReceiveAsync<MqttConnAckPacket>(connectPacket);
if (response.ConnectReturnCode != MqttConnectReturnCode.ConnectionAccepted)
@@ -77,7 +79,9 @@ namespace MQTTnet.Core.Client
if (_options.KeepAlivePeriod != TimeSpan.Zero)
{
Task.Run(() => SendKeepAliveMessagesAsync(_cancellationTokenSource.Token), _cancellationTokenSource.Token).Forget();
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
Task.Run(() => SendKeepAliveMessagesAsync(_cancellationTokenSource.Token), _cancellationTokenSource.Token);
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
}
Connected?.Invoke(this, EventArgs.Empty);
@@ -350,7 +354,9 @@ namespace MQTTnet.Core.Client
var mqttPacket = await _adapter.ReceivePacketAsync(TimeSpan.Zero);
MqttTrace.Information(nameof(MqttClient), $"Received <<< {mqttPacket}");
Task.Run(() => ProcessReceivedPacket(mqttPacket), cancellationToken).Forget();
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
Task.Run(() => ProcessReceivedPacket(mqttPacket), cancellationToken);
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
}
}
catch (MqttCommunicationException exception)
+4 -21
View File
@@ -2,11 +2,13 @@
namespace MQTTnet.Core.Client
{
public class MqttClientOptions
public sealed class MqttClientOptions
{
public string Server { get; set; }
public int Port { get; set; } = 1883;
public int? Port { get; set; }
public MqttClientSslOptions SslOptions { get; } = new MqttClientSslOptions();
public string UserName { get; set; }
@@ -19,24 +21,5 @@ namespace MQTTnet.Core.Client
public TimeSpan KeepAlivePeriod { get; set; } = TimeSpan.FromSeconds(5);
public TimeSpan DefaultCommunicationTimeout { get; set; } = TimeSpan.FromSeconds(10);
/// <summary>
/// Use SSL to communicate with the MQTT server.
/// </summary>
/// <remarks>Setting this value to <c>true</c> will also set <see cref="Port"/> to <c>8883</c> if its value was <c>1883</c> (not set).</remarks>
public bool UseSSL
{
get => _useSSL;
set
{
// Automatically set the port to the MQTT SSL port (8883) if it wasn't set already
if (value && Port == 1883)
Port = 8883;
_useSSL = value;
}
}
private bool _useSSL;
}
}
@@ -0,0 +1,19 @@
using System;
namespace MQTTnet.Core.Client
{
public static class MqttClientOptionsExtensions
{
public static int GetPort(this MqttClientOptions options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
if (options.Port.HasValue)
{
return options.Port.Value;
}
return !options.SslOptions.UseSsl ? 1883 : 8883;
}
}
}
@@ -0,0 +1,13 @@
using System.Collections.Generic;
namespace MQTTnet.Core.Client
{
public sealed class MqttClientSslOptions
{
public bool UseSsl { get; set; }
public bool CheckCertificateRevocation { get; set; }
public List<byte[]> Certificates { get; set; }
}
}
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Diagnostics
{
public class MqttTraceMessagePublishedEventArgs : EventArgs
public sealed class MqttTraceMessagePublishedEventArgs : EventArgs
{
public MqttTraceMessagePublishedEventArgs(int threadId, string source, MqttTraceLevel level, string message, Exception exception)
{
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Exceptions
{
public class MqttCommunicationTimedOutException : MqttCommunicationException
public sealed class MqttCommunicationTimedOutException : MqttCommunicationException
{
}
}
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Exceptions
{
public class MqttProtocolViolationException : Exception
public sealed class MqttProtocolViolationException : Exception
{
public MqttProtocolViolationException(string message)
: base(message)
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Threading.Tasks;
namespace MQTTnet.Core.Internal
{
public class AsyncGate
public sealed class AsyncGate
{
private readonly Queue<TaskCompletionSource<bool>> _waitingTasks = new Queue<TaskCompletionSource<bool>>();
-11
View File
@@ -1,11 +0,0 @@
using System.Threading.Tasks;
namespace MQTTnet.Core.Internal
{
internal static class TaskExtensions
{
public static void Forget(this Task task)
{
}
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core
{
public class MqttApplicationMessage
public sealed class MqttApplicationMessage
{
public MqttApplicationMessage(string topic, byte[] payload, MqttQualityOfServiceLevel qualityOfServiceLevel, bool retain)
{
@@ -2,7 +2,7 @@
namespace MQTTnet.Core
{
public class MqttApplicationMessageReceivedEventArgs : EventArgs
public sealed class MqttApplicationMessageReceivedEventArgs : EventArgs
{
public MqttApplicationMessageReceivedEventArgs(MqttApplicationMessage applicationMessage)
{
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Packets
{
public class MqttConnAckPacket : MqttBasePacket
public sealed class MqttConnAckPacket : MqttBasePacket
{
public bool IsSessionPresent { get; set; }
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttConnectPacket: MqttBasePacket
public sealed class MqttConnectPacket: MqttBasePacket
{
public string ClientId { get; set; }
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttDisconnectPacket : MqttBasePacket
public sealed class MqttDisconnectPacket : MqttBasePacket
{
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPingReqPacket : MqttBasePacket
public sealed class MqttPingReqPacket : MqttBasePacket
{
public override string ToString()
{
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPingRespPacket : MqttBasePacket
public sealed class MqttPingRespPacket : MqttBasePacket
{
public override string ToString()
{
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPubAckPacket : MqttBasePublishPacket
public sealed class MqttPubAckPacket : MqttBasePublishPacket
{
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPubCompPacket : MqttBasePublishPacket
public sealed class MqttPubCompPacket : MqttBasePublishPacket
{
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPubRecPacket : MqttBasePublishPacket
public sealed class MqttPubRecPacket : MqttBasePublishPacket
{
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttPubRelPacket : MqttBasePublishPacket
public sealed class MqttPubRelPacket : MqttBasePublishPacket
{
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Packets
{
public class MqttPublishPacket : MqttBasePublishPacket
public sealed class MqttPublishPacket : MqttBasePublishPacket
{
public bool Retain { get; set; }
+1 -1
View File
@@ -4,7 +4,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Packets
{
public class MqttSubAckPacket : MqttBasePacket, IPacketWithIdentifier
public sealed class MqttSubAckPacket : MqttBasePacket, IPacketWithIdentifier
{
public ushort PacketIdentifier { get; set; }
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Linq;
namespace MQTTnet.Core.Packets
{
public class MqttSubscribePacket : MqttBasePacket, IPacketWithIdentifier
public sealed class MqttSubscribePacket : MqttBasePacket, IPacketWithIdentifier
{
public ushort PacketIdentifier { get; set; }
+1 -1
View File
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Packets
{
public class MqttUnsubAckPacket : MqttBasePacket, IPacketWithIdentifier
public sealed class MqttUnsubAckPacket : MqttBasePacket, IPacketWithIdentifier
{
public ushort PacketIdentifier { get; set; }
}
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Packets
{
public class MqttUnsubscribePacket : MqttBasePacket, IPacketWithIdentifier
public sealed class MqttUnsubscribePacket : MqttBasePacket, IPacketWithIdentifier
{
public ushort PacketIdentifier { get; set; }
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Packets
{
public class TopicFilter
public sealed class TopicFilter
{
public TopicFilter(string topic, MqttQualityOfServiceLevel qualityOfServiceLevel)
{
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Serializer
{
public class ByteReader
public sealed class ByteReader
{
private readonly int _source;
private int _index;
+1 -1
View File
@@ -2,7 +2,7 @@
namespace MQTTnet.Core.Serializer
{
public class ByteWriter
public sealed class ByteWriter
{
private int _index;
private int _byte;
@@ -9,7 +9,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Serializer
{
public class DefaultMqttV311PacketSerializer : IMqttPacketSerializer
public sealed class DefaultMqttV311PacketSerializer : IMqttPacketSerializer
{
public Task SerializeAsync(MqttBasePacket packet, IMqttCommunicationChannel destination)
{
@@ -0,0 +1,9 @@
namespace MQTTnet.Core.Server
{
public sealed class DefaultEndpointOptions
{
public bool IsEnabled { get; set; } = true;
public int? Port { get; set; }
}
}
@@ -1,6 +1,6 @@
namespace MQTTnet.Core.Server
{
public class GetOrCreateClientSessionResult
public sealed class GetOrCreateClientSessionResult
{
public bool IsExistingSession { get; set; }
@@ -11,7 +11,7 @@ using MQTTnet.Core.Packets;
namespace MQTTnet.Core.Server
{
public class MqttClientMessageQueue
public sealed class MqttClientMessageQueue
{
private readonly List<MqttClientPublishPacketContext> _pendingPublishPackets = new List<MqttClientPublishPacketContext>();
private readonly AsyncGate _gate = new AsyncGate();
@@ -3,7 +3,7 @@ using MQTTnet.Core.Packets;
namespace MQTTnet.Core.Server
{
public class MqttClientPublishPacketContext
public sealed class MqttClientPublishPacketContext
{
public MqttClientPublishPacketContext(MqttClientSession senderClientSession, MqttPublishPacket publishPacket)
{
@@ -10,7 +10,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Server
{
public class MqttClientSessionsManager
public sealed class MqttClientSessionsManager
{
private readonly object _syncRoot = new object();
private readonly Dictionary<string, MqttClientSession> _clientSessions = new Dictionary<string, MqttClientSession>();
@@ -5,7 +5,7 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Server
{
public class MqttClientSubscriptionsManager
public sealed class MqttClientSubscriptionsManager
{
private readonly ConcurrentDictionary<string, MqttQualityOfServiceLevel> _subscribedTopics = new ConcurrentDictionary<string, MqttQualityOfServiceLevel>();
+15 -9
View File
@@ -7,18 +7,18 @@ using MQTTnet.Core.Diagnostics;
namespace MQTTnet.Core.Server
{
public class MqttServer
public sealed class MqttServer
{
private readonly MqttClientSessionsManager _clientSessionsManager;
private readonly IMqttServerAdapter _adapter;
private readonly ICollection<IMqttServerAdapter> _adapters;
private readonly MqttServerOptions _options;
private CancellationTokenSource _cancellationTokenSource;
public MqttServer(MqttServerOptions options, IMqttServerAdapter adapter)
public MqttServer(MqttServerOptions options, ICollection<IMqttServerAdapter> adapters)
{
_options = options ?? throw new ArgumentNullException(nameof(options));
_adapter = adapter ?? throw new ArgumentNullException(nameof(adapter));
_adapters = adapters ?? throw new ArgumentNullException(nameof(adapters));
_clientSessionsManager = new MqttClientSessionsManager(options);
}
@@ -45,9 +45,12 @@ namespace MQTTnet.Core.Server
_cancellationTokenSource = new CancellationTokenSource();
_adapter.ClientConnected += OnClientConnected;
_adapter.Start(_options);
foreach (var adapter in _adapters)
{
adapter.ClientConnected += OnClientConnected;
adapter.Start(_options);
}
MqttTrace.Information(nameof(MqttServer), "Started.");
}
@@ -56,8 +59,11 @@ namespace MQTTnet.Core.Server
_cancellationTokenSource?.Cancel();
_cancellationTokenSource = null;
_adapter.ClientConnected -= OnClientConnected;
_adapter.Stop();
foreach (var adapter in _adapters)
{
adapter.ClientConnected -= OnClientConnected;
adapter.Stop();
}
_clientSessionsManager.Clear();
+4 -9
View File
@@ -4,21 +4,16 @@ using MQTTnet.Core.Protocol;
namespace MQTTnet.Core.Server
{
public class MqttServerOptions
public sealed class MqttServerOptions
{
public int Port { get; set; } = 1883;
public DefaultEndpointOptions DefaultEndpointOptions { get; } = new DefaultEndpointOptions();
public SslEndpointOptions SslEndpointOptions { get; } = new SslEndpointOptions();
public int ConnectionBacklog { get; set; } = 10;
public TimeSpan DefaultCommunicationTimeout { get; set; } = TimeSpan.FromSeconds(10);
public Func<MqttConnectPacket, MqttConnectReturnCode> ConnectionValidator { get; set; }
public bool UseSSL = false;
/// <summary>
/// The path to the X509 SSL certificate.
/// </summary>
public string CertificatePath = string.Empty;
}
}
@@ -0,0 +1,31 @@
using System;
namespace MQTTnet.Core.Server
{
public static class MqttServerOptionsExtensions
{
public static int GetSslEndpointPort(this MqttServerOptions options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
if (!options.SslEndpointOptions.Port.HasValue)
{
return 8883;
}
return options.SslEndpointOptions.Port.Value;
}
public static int GetDefaultEndpointPort(this MqttServerOptions options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
if (!options.DefaultEndpointOptions.Port.HasValue)
{
return 1883;
}
return options.DefaultEndpointOptions.Port.Value;
}
}
}
+11
View File
@@ -0,0 +1,11 @@
namespace MQTTnet.Core.Server
{
public sealed class SslEndpointOptions
{
public bool IsEnabled { get; set; }
public int? Port { get; set; }
public byte[] Certificate { get; set; }
}
}
@@ -0,0 +1,19 @@
using System;
namespace MQTTnet.Core.Server
{
public static class SslEndpointOptionsExtensions
{
public static int GetPort(this DefaultEndpointOptions options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
if (!options.Port.HasValue)
{
return 1883;
}
return options.Port.Value;
}
}
}