Files
MQTTnet/Tests/MQTTnet.TestApp.AspNetCore2/Startup.cs
T

95 lines
2.9 KiB
C#

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<TargetFrameworkAttribute>()?
.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"))
});
}
}
}