From a25c8cd4c72f5a5cc5ffe1f36fb5d2ed56f1870d Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Wed, 17 Apr 2019 21:44:09 +0200 Subject: [PATCH] Fix some minor TODOs. --- .../Mqtt/MqttApplicationMessageInterceptor.cs | 16 --------- .../MQTTnet/Formatter/IMqttDataConverter.cs | 2 ++ Source/MQTTnet/Formatter/MqttPacketWriter.cs | 1 - .../Formatter/V3/MqttV310DataConverter.cs | 9 +++++ .../Formatter/V5/MqttV500DataConverter.cs | 17 +++++++--- .../Formatter/V5/MqttV500PacketEncoder.cs | 2 +- Source/MQTTnet/Server/MqttClientConnection.cs | 11 ++---- .../MQTTnet.Benchmarks/SerializerBenchmark.cs | 6 ++-- .../App.xaml.cs | 34 ++----------------- 9 files changed, 31 insertions(+), 67 deletions(-) diff --git a/Source/MQTTnet.Server/Mqtt/MqttApplicationMessageInterceptor.cs b/Source/MQTTnet.Server/Mqtt/MqttApplicationMessageInterceptor.cs index ab3d589c..c5f3afd4 100644 --- a/Source/MQTTnet.Server/Mqtt/MqttApplicationMessageInterceptor.cs +++ b/Source/MQTTnet.Server/Mqtt/MqttApplicationMessageInterceptor.cs @@ -46,21 +46,5 @@ namespace MQTTnet.Server.Mqtt return Task.CompletedTask; } - - // TODO: Create dump(object) method in wrapper (creates JSON and prints it). - public class PythonMqttApplicationMessageInterceptorContext - { - public bool accept_connection; - - public bool accept_publish; - - public string client_id; - - public string topic; - - public int qos; - - public bool retain; - } } } diff --git a/Source/MQTTnet/Formatter/IMqttDataConverter.cs b/Source/MQTTnet/Formatter/IMqttDataConverter.cs index 5b347e52..c4540e73 100644 --- a/Source/MQTTnet/Formatter/IMqttDataConverter.cs +++ b/Source/MQTTnet/Formatter/IMqttDataConverter.cs @@ -12,6 +12,8 @@ namespace MQTTnet.Formatter { MqttPublishPacket CreatePublishPacket(MqttApplicationMessage applicationMessage); + MqttPubAckPacket CreatePubAckPacket(MqttPublishPacket publishPacket); + MqttApplicationMessage CreateApplicationMessage(MqttPublishPacket publishPacket); MqttClientAuthenticateResult CreateClientConnectResult(MqttConnAckPacket connAckPacket); diff --git a/Source/MQTTnet/Formatter/MqttPacketWriter.cs b/Source/MQTTnet/Formatter/MqttPacketWriter.cs index eb7253e0..4c44d559 100644 --- a/Source/MQTTnet/Formatter/MqttPacketWriter.cs +++ b/Source/MQTTnet/Formatter/MqttPacketWriter.cs @@ -19,7 +19,6 @@ namespace MQTTnet.Formatter public static int InitialBufferSize = 128; public static int MaxBufferSize = 4096; - // TODO: Consider using the ArrayPool here together with FreeBuffer. private byte[] _buffer = new byte[InitialBufferSize]; private int _offset; diff --git a/Source/MQTTnet/Formatter/V3/MqttV310DataConverter.cs b/Source/MQTTnet/Formatter/V3/MqttV310DataConverter.cs index 49c25a0c..642720cc 100644 --- a/Source/MQTTnet/Formatter/V3/MqttV310DataConverter.cs +++ b/Source/MQTTnet/Formatter/V3/MqttV310DataConverter.cs @@ -33,6 +33,15 @@ namespace MQTTnet.Formatter.V3 }; } + public MqttPubAckPacket CreatePubAckPacket(MqttPublishPacket publishPacket) + { + return new MqttPubAckPacket + { + PacketIdentifier = publishPacket.PacketIdentifier, + ReasonCode = MqttPubAckReasonCode.Success + }; + } + public MqttApplicationMessage CreateApplicationMessage(MqttPublishPacket publishPacket) { if (publishPacket == null) throw new ArgumentNullException(nameof(publishPacket)); diff --git a/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs b/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs index e3bcb4ed..6b4151a8 100644 --- a/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs +++ b/Source/MQTTnet/Formatter/V5/MqttV500DataConverter.cs @@ -46,6 +46,15 @@ namespace MQTTnet.Formatter.V5 return packet; } + public MqttPubAckPacket CreatePubAckPacket(MqttPublishPacket publishPacket) + { + return new MqttPubAckPacket + { + PacketIdentifier = publishPacket.PacketIdentifier, + ReasonCode = MqttPubAckReasonCode.Success + }; + } + public MqttApplicationMessage CreateApplicationMessage(MqttPublishPacket publishPacket) { return new MqttApplicationMessage @@ -180,12 +189,10 @@ namespace MQTTnet.Formatter.V5 public MqttClientPublishResult CreatePublishResult(MqttPubAckPacket pubAckPacket) { - var result = new MqttClientPublishResult(); - - if (pubAckPacket?.ReasonCode != null) + var result = new MqttClientPublishResult { - result.ReasonCode = (MqttClientPublishReasonCode)pubAckPacket.ReasonCode; - } + ReasonCode = (MqttClientPublishReasonCode)pubAckPacket.ReasonCode + }; return result; } diff --git a/Source/MQTTnet/Formatter/V5/MqttV500PacketEncoder.cs b/Source/MQTTnet/Formatter/V5/MqttV500PacketEncoder.cs index 5ccd0301..5800d30f 100644 --- a/Source/MQTTnet/Formatter/V5/MqttV500PacketEncoder.cs +++ b/Source/MQTTnet/Formatter/V5/MqttV500PacketEncoder.cs @@ -285,7 +285,7 @@ namespace MQTTnet.Formatter.V5 if (!packet.ReasonCode.HasValue) { - throw new MqttProtocolViolationException("PubAck packet must contain a connect reason."); + throw new MqttProtocolViolationException("PubAck packet must contain a reason code."); } packetWriter.Write(packet.PacketIdentifier.Value); diff --git a/Source/MQTTnet/Server/MqttClientConnection.cs b/Source/MQTTnet/Server/MqttClientConnection.cs index 1146ea85..9b270c0b 100644 --- a/Source/MQTTnet/Server/MqttClientConnection.cs +++ b/Source/MQTTnet/Server/MqttClientConnection.cs @@ -330,15 +330,8 @@ namespace MQTTnet.Server var applicationMessage = _dataConverter.CreateApplicationMessage(publishPacket); _sessionsManager.DispatchApplicationMessage(applicationMessage, this); - // TODO: Create ACK packet. - - var response = new MqttPubAckPacket - { - PacketIdentifier = publishPacket.PacketIdentifier, - ReasonCode = MqttPubAckReasonCode.Success - }; - - return SendAsync(response); + var pubAckPacket = _dataConverter.CreatePubAckPacket(publishPacket); + return SendAsync(pubAckPacket); } private Task HandleIncomingPublishPacketWithQoS2Async(MqttPublishPacket publishPacket) diff --git a/Tests/MQTTnet.Benchmarks/SerializerBenchmark.cs b/Tests/MQTTnet.Benchmarks/SerializerBenchmark.cs index 35a001d0..c8b3f7c6 100644 --- a/Tests/MQTTnet.Benchmarks/SerializerBenchmark.cs +++ b/Tests/MQTTnet.Benchmarks/SerializerBenchmark.cs @@ -84,12 +84,12 @@ namespace MQTTnet.Benchmarks public Task ConnectAsync(CancellationToken cancellationToken) { - throw new NotImplementedException(); + throw new NotSupportedException(); } public Task DisconnectAsync(CancellationToken cancellationToken) { - throw new NotImplementedException(); + throw new NotSupportedException(); } public Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) @@ -102,7 +102,7 @@ namespace MQTTnet.Benchmarks public Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { - throw new NotImplementedException(); + throw new NotSupportedException(); } public void Dispose() diff --git a/Tests/MQTTnet.TestApp.UniversalWindows/App.xaml.cs b/Tests/MQTTnet.TestApp.UniversalWindows/App.xaml.cs index 3ed0757a..13b5d0b4 100644 --- a/Tests/MQTTnet.TestApp.UniversalWindows/App.xaml.cs +++ b/Tests/MQTTnet.TestApp.UniversalWindows/App.xaml.cs @@ -15,28 +15,14 @@ namespace MQTTnet.TestApp.UniversalWindows Suspending += OnSuspending; } - /// - /// Invoked when the application is launched normally by the end user. Other entry points - /// will be used such as when the application is launched to open a specific file. - /// - /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active if (!(Window.Current.Content is Frame rootFrame)) { - // Create a Frame to act as the navigation context and navigate to the first page rootFrame = new Frame(); rootFrame.NavigationFailed += OnNavigationFailed; - if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - //TODO: Load state from previously suspended application - } - - // Place the frame in the current Window Window.Current.Content = rootFrame; } @@ -44,37 +30,21 @@ namespace MQTTnet.TestApp.UniversalWindows { if (rootFrame.Content == null) { - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter rootFrame.Navigate(typeof(MainPage), e.Arguments); } - // Ensure the current window is active + Window.Current.Activate(); } } - - /// - /// Invoked when Navigation to a certain page fails - /// - /// The Frame which failed navigation - /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } - /// - /// Invoked when application execution is being suspended. Application state is saved - /// without knowing whether the application will be terminated or resumed with the contents - /// of memory still intact. - /// - /// The source of the suspend request. - /// Details about the suspend request. private void OnSuspending(object sender, SuspendingEventArgs e) { var deferral = e.SuspendingOperation.GetDeferral(); - //TODO: Save application state and stop any background activity deferral.Complete(); } }