mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 01:03:01 +08:00
95 lines
2.9 KiB
C#
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"))
|
|
});
|
|
}
|
|
}
|
|
}
|