From b5fc6e3d12be32056aae154ee7faf4d75c5ae565 Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Sat, 16 Sep 2017 17:06:47 +0200 Subject: [PATCH] Refactorings --- .../Implementations/MqttWebSocketChannel.cs | 12 +++++++++--- .../Implementations/MqttWebSocketChannel.cs | 10 ++++++++-- .../Implementations/MqttWebSocketChannel.cs | 12 +++++++++--- .../Adapter/MqttChannelCommunicationAdapter.cs | 14 +++++++++++--- MQTTnet.Core/Internal/TaskExtensions.cs | 4 ++-- Tests/MQTTnet.Core.Tests/ExtensionTests.cs | 12 ++++++------ .../MainPage.xaml.cs | 1 - 7 files changed, 45 insertions(+), 20 deletions(-) diff --git a/Frameworks/MQTTnet.NetFramework/Implementations/MqttWebSocketChannel.cs b/Frameworks/MQTTnet.NetFramework/Implementations/MqttWebSocketChannel.cs index 332180e3..7455dd24 100644 --- a/Frameworks/MQTTnet.NetFramework/Implementations/MqttWebSocketChannel.cs +++ b/Frameworks/MQTTnet.NetFramework/Implementations/MqttWebSocketChannel.cs @@ -19,14 +19,20 @@ namespace MQTTnet.Implementations public async Task ConnectAsync(MqttClientOptions options) { _webSocket = new ClientWebSocket(); - await _webSocket.ConnectAsync(new Uri(options.Server), CancellationToken.None); + await _webSocket.ConnectAsync(new Uri(options.Server), CancellationToken.None).ConfigureAwait(false); RawStream = new WebSocketStream(_webSocket); } - public Task DisconnectAsync() + public async Task DisconnectAsync() { RawStream = null; - return _webSocket?.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + + if (_webSocket == null) + { + return; + } + + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).ConfigureAwait(false); } public void Dispose() diff --git a/Frameworks/MQTTnet.NetStandard/Implementations/MqttWebSocketChannel.cs b/Frameworks/MQTTnet.NetStandard/Implementations/MqttWebSocketChannel.cs index 1ca501ad..317aa821 100644 --- a/Frameworks/MQTTnet.NetStandard/Implementations/MqttWebSocketChannel.cs +++ b/Frameworks/MQTTnet.NetStandard/Implementations/MqttWebSocketChannel.cs @@ -23,10 +23,16 @@ namespace MQTTnet.Implementations RawStream = new WebSocketStream(_webSocket); } - public Task DisconnectAsync() + public async Task DisconnectAsync() { RawStream = null; - return _webSocket?.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + + if (_webSocket == null) + { + return; + } + + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).ConfigureAwait(false); } public void Dispose() diff --git a/Frameworks/MQTTnet.UniversalWindows/Implementations/MqttWebSocketChannel.cs b/Frameworks/MQTTnet.UniversalWindows/Implementations/MqttWebSocketChannel.cs index d8572ade..9d6b7ee9 100644 --- a/Frameworks/MQTTnet.UniversalWindows/Implementations/MqttWebSocketChannel.cs +++ b/Frameworks/MQTTnet.UniversalWindows/Implementations/MqttWebSocketChannel.cs @@ -19,14 +19,20 @@ namespace MQTTnet.Implementations public async Task ConnectAsync(MqttClientOptions options) { _webSocket = new ClientWebSocket(); - await _webSocket.ConnectAsync(new Uri(options.Server), CancellationToken.None); + await _webSocket.ConnectAsync(new Uri(options.Server), CancellationToken.None).ConfigureAwait(false); RawStream = new WebSocketStream(_webSocket); } - public Task DisconnectAsync() + public async Task DisconnectAsync() { RawStream = null; - return _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); + + if (_webSocket == null) + { + return; + } + + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).ConfigureAwait(false); } public void Dispose() diff --git a/MQTTnet.Core/Adapter/MqttChannelCommunicationAdapter.cs b/MQTTnet.Core/Adapter/MqttChannelCommunicationAdapter.cs index 9f993492..33a2f8ee 100644 --- a/MQTTnet.Core/Adapter/MqttChannelCommunicationAdapter.cs +++ b/MQTTnet.Core/Adapter/MqttChannelCommunicationAdapter.cs @@ -30,7 +30,7 @@ namespace MQTTnet.Core.Adapter { try { - await _channel.ConnectAsync(options).TimeoutAfter(timeout); + await _channel.ConnectAsync(options).TimeoutAfter(timeout).ConfigureAwait(false); } catch (MqttCommunicationTimedOutException) { @@ -50,7 +50,7 @@ namespace MQTTnet.Core.Adapter { try { - await _channel.DisconnectAsync(); + await _channel.DisconnectAsync().ConfigureAwait(false); } catch (MqttCommunicationTimedOutException) { @@ -82,7 +82,15 @@ namespace MQTTnet.Core.Adapter } await _sendTask; // configure await false geneates stackoverflow - await _channel.SendStream.FlushAsync().TimeoutAfter(timeout).ConfigureAwait(false); + + if (timeout > TimeSpan.Zero) + { + await _channel.SendStream.FlushAsync().TimeoutAfter(timeout).ConfigureAwait(false); + } + else + { + await _channel.SendStream.FlushAsync().ConfigureAwait(false); + } } catch (MqttCommunicationTimedOutException) { diff --git a/MQTTnet.Core/Internal/TaskExtensions.cs b/MQTTnet.Core/Internal/TaskExtensions.cs index 67890f4a..82a88ab5 100644 --- a/MQTTnet.Core/Internal/TaskExtensions.cs +++ b/MQTTnet.Core/Internal/TaskExtensions.cs @@ -25,9 +25,9 @@ namespace MQTTnet.Core.Internal try { - #pragma warning disable 4014 +#pragma warning disable 4014 task.ContinueWith(t => - #pragma warning restore 4014 +#pragma warning restore 4014 { if (t.IsFaulted) { diff --git a/Tests/MQTTnet.Core.Tests/ExtensionTests.cs b/Tests/MQTTnet.Core.Tests/ExtensionTests.cs index 1a3cd29c..30a84f41 100644 --- a/Tests/MQTTnet.Core.Tests/ExtensionTests.cs +++ b/Tests/MQTTnet.Core.Tests/ExtensionTests.cs @@ -9,25 +9,25 @@ namespace MQTTnet.Core.Tests [TestClass] public class ExtensionTests { - [ExpectedException(typeof( MqttCommunicationTimedOutException ) )] + [ExpectedException(typeof(MqttCommunicationTimedOutException))] [TestMethod] public async Task TestTimeoutAfter() { await Task.Delay(TimeSpan.FromMilliseconds(500)).TimeoutAfter(TimeSpan.FromMilliseconds(100)); } - [ExpectedException(typeof( MqttCommunicationTimedOutException))] + [ExpectedException(typeof(MqttCommunicationTimedOutException))] [TestMethod] public async Task TestTimeoutAfterWithResult() { - await Task.Delay(TimeSpan.FromMilliseconds(500)).ContinueWith(t => 5).TimeoutAfter(TimeSpan.FromMilliseconds(100)); + await Task.Delay(TimeSpan.FromMilliseconds(500)).ContinueWith(t => 5).TimeoutAfter(TimeSpan.FromMilliseconds(100)); } - + [TestMethod] public async Task TestTimeoutAfterCompleteInTime() { - var result = await Task.Delay( TimeSpan.FromMilliseconds( 100 ) ).ContinueWith( t => 5 ).TimeoutAfter( TimeSpan.FromMilliseconds( 500 ) ); - Assert.AreEqual( 5, result ); + var result = await Task.Delay(TimeSpan.FromMilliseconds(100)).ContinueWith(t => 5).TimeoutAfter(TimeSpan.FromMilliseconds(500)); + Assert.AreEqual(5, result); } } } diff --git a/Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs b/Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs index 4b259480..9c1b60d3 100644 --- a/Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs +++ b/Tests/MQTTnet.TestApp.UniversalWindows/MainPage.xaml.cs @@ -36,7 +36,6 @@ namespace MQTTnet.TestApp.UniversalWindows var options = new MqttClientOptions { Server = Server.Text, - Port = 8080, UserName = User.Text, Password = Password.Text, ClientId = ClientId.Text,