using System; using System.IO; using System.Reflection; using System.Runtime.Versioning; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using MQTTnet.AspNetCore; using MQTTnet.Server; namespace MQTTnet.TestApp.AspNetCore2 { public class Startup { // In class _Startup_ of the ASP.NET Core 2.0 project. public void ConfigureServices(IServiceCollection services) { services .AddHostedMqttServer(mqttServer => mqttServer.WithoutDefaultEndpoint()) .AddMqttConnectionHandler() .AddConnections(); } // In class _Startup_ of the ASP.NET Core 3.1 project. #if NETCOREAPP3_1 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapMqtt("/mqtt"); }); #else public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseConnections(c => c.MapMqtt("/mqtt")); #endif app.UseMqttServer(server => { server.StartedHandler = new MqttServerStartedHandlerDelegate(async args => { var frameworkName = GetType().Assembly.GetCustomAttribute()? .FrameworkName; var msg = new MqttApplicationMessageBuilder() .WithPayload($"Mqtt hosted on {frameworkName} is awesome") .WithTopic("message"); while (true) { try { await server.PublishAsync(msg.Build()); msg.WithPayload($"Mqtt hosted on {frameworkName} is still awesome at {DateTime.Now}"); } catch (Exception e) { Console.WriteLine(e); } finally { await Task.Delay(TimeSpan.FromSeconds(2)); } } }); }); app.Use((context, next) => { if (context.Request.Path == "/") { context.Request.Path = "/Index.html"; } return next(); }); app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions { RequestPath = "/node_modules", FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "node_modules")) }); } } }