From 3e6edb92c5de5de55b0e904970535f5a18e5a579 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 13 May 2018 20:59:00 +0200 Subject: [PATCH] Refactor ASP.NET integration. --- .../ApplicationBuilderExtensions.cs | 42 ++++++++----------- .../MqttWebSocketServerAdapter.cs | 8 +++- .../MQTTnet.NetStandard/Server/MqttServer.cs | 8 ++-- .../wwwroot/app/app.ts | 8 ++-- .../MQTTnet.TestApp.UniversalWindows.csproj | 2 +- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs b/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs index e2497f14..513712e5 100644 --- a/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs +++ b/Frameworks/MQTTnet.AspnetCore/ApplicationBuilderExtensions.cs @@ -13,32 +13,26 @@ namespace MQTTnet.AspNetCore app.UseWebSockets(); app.Use(async (context, next) => { - if (context.Request.Path == path && context.WebSockets.IsWebSocketRequest) - { - string subprotocol = null; - - if (context.Request.Headers.TryGetValue("Sec-WebSocket-Protocol", out var requestedSubProtocolValues)) - { - // Order the protocols to also match "mqtt", "mqttv-3.1", "mqttv-3.11" etc. - subprotocol = requestedSubProtocolValues - .OrderByDescending(p => p.Length) - .FirstOrDefault(p => p.ToLower().StartsWith("mqtt")); - } - - if (subprotocol == null) - { - return; - } - - var adapter = app.ApplicationServices.GetRequiredService(); - using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subprotocol)) - { - await adapter.AcceptWebSocketAsync(webSocket); - } - } - else + if (!context.WebSockets.IsWebSocketRequest || context.Request.Path != path) { await next(); + return; + } + + string subProtocol = null; + + if (context.Request.Headers.TryGetValue("Sec-WebSocket-Protocol", out var requestedSubProtocolValues)) + { + // Order the protocols to also match "mqtt", "mqttv-3.1", "mqttv-3.11" etc. + subProtocol = requestedSubProtocolValues + .OrderByDescending(p => p.Length) + .FirstOrDefault(p => p.ToLower().StartsWith("mqtt")); + } + + var adapter = app.ApplicationServices.GetRequiredService(); + using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subProtocol)) + { + await adapter.AcceptWebSocketAsync(webSocket); } }); diff --git a/Frameworks/MQTTnet.AspnetCore/MqttWebSocketServerAdapter.cs b/Frameworks/MQTTnet.AspnetCore/MqttWebSocketServerAdapter.cs index d5401dca..a10417ff 100644 --- a/Frameworks/MQTTnet.AspnetCore/MqttWebSocketServerAdapter.cs +++ b/Frameworks/MQTTnet.AspnetCore/MqttWebSocketServerAdapter.cs @@ -23,7 +23,7 @@ namespace MQTTnet.AspNetCore return Task.CompletedTask; } - public Task AcceptWebSocketAsync(WebSocket webSocket) + public async Task AcceptWebSocketAsync(WebSocket webSocket) { if (webSocket == null) throw new ArgumentNullException(nameof(webSocket)); @@ -31,7 +31,11 @@ namespace MQTTnet.AspNetCore var eventArgs = new MqttServerAdapterClientAcceptedEventArgs(clientAdapter); ClientAccepted?.Invoke(this, eventArgs); - return eventArgs.SessionTask ?? Task.CompletedTask; + + if (eventArgs.SessionTask != null) + { + await eventArgs.SessionTask.ConfigureAwait(false); + } } public void Dispose() diff --git a/Frameworks/MQTTnet.NetStandard/Server/MqttServer.cs b/Frameworks/MQTTnet.NetStandard/Server/MqttServer.cs index 4323e2e3..f7f506dc 100644 --- a/Frameworks/MQTTnet.NetStandard/Server/MqttServer.cs +++ b/Frameworks/MQTTnet.NetStandard/Server/MqttServer.cs @@ -81,14 +81,14 @@ namespace MQTTnet.Server _cancellationTokenSource = new CancellationTokenSource(); _retainedMessagesManager = new MqttRetainedMessagesManager(Options, _logger); - await _retainedMessagesManager.LoadMessagesAsync(); + await _retainedMessagesManager.LoadMessagesAsync().ConfigureAwait(false); _clientSessionsManager = new MqttClientSessionsManager(Options, this, _retainedMessagesManager, _logger); foreach (var adapter in _adapters) { adapter.ClientAccepted += OnClientAccepted; - await adapter.StartAsync(Options); + await adapter.StartAsync(Options).ConfigureAwait(false); } _logger.Info("Started."); @@ -110,10 +110,10 @@ namespace MQTTnet.Server foreach (var adapter in _adapters) { adapter.ClientAccepted -= OnClientAccepted; - await adapter.StopAsync(); + await adapter.StopAsync().ConfigureAwait(false); } - await _clientSessionsManager.StopAsync(); + await _clientSessionsManager.StopAsync().ConfigureAwait(false); _logger.Info("Stopped."); } diff --git a/Tests/MQTTnet.TestApp.AspNetCore2/wwwroot/app/app.ts b/Tests/MQTTnet.TestApp.AspNetCore2/wwwroot/app/app.ts index 3ce98566..b7167701 100644 --- a/Tests/MQTTnet.TestApp.AspNetCore2/wwwroot/app/app.ts +++ b/Tests/MQTTnet.TestApp.AspNetCore2/wwwroot/app/app.ts @@ -2,7 +2,7 @@ var client = connect('ws://' + location.host + '/mqtt', { - clientId: "client1", + clientId: "client" + Math.floor(Math.random() * 6) + 1 }); window.onbeforeunload = () => { @@ -23,11 +23,12 @@ publishButton.onclick = click => { client.on('connect', () => { client.subscribe('#', { qos: 0 }, (err, granted) => { - console.log(err); + console.log(err); }); client.publish('presence', 'Hello mqtt'); stateParagraph.innerText = "connected"; + showMsg("[connect]"); }); client.on("error", e => { @@ -36,6 +37,7 @@ client.on("error", e => { client.on("reconnect", () => { stateParagraph.innerText = "reconnecting"; + showMsg("[reconnect]"); }); client.on('message', (topic, message) => { @@ -50,7 +52,7 @@ function showMsg(msg: string) { msgsList.appendChild(node); - if (msgsList.childElementCount > 20) { + if (msgsList.childElementCount > 50) { msgsList.removeChild(msgsList.childNodes[0]); } } \ No newline at end of file diff --git a/Tests/MQTTnet.TestApp.UniversalWindows/MQTTnet.TestApp.UniversalWindows.csproj b/Tests/MQTTnet.TestApp.UniversalWindows/MQTTnet.TestApp.UniversalWindows.csproj index 73636f04..0a69b342 100644 --- a/Tests/MQTTnet.TestApp.UniversalWindows/MQTTnet.TestApp.UniversalWindows.csproj +++ b/Tests/MQTTnet.TestApp.UniversalWindows/MQTTnet.TestApp.UniversalWindows.csproj @@ -138,7 +138,7 @@ - 6.0.8 + 6.1.4 2.2.0