using Infrastructure.CloudSdk.mqttmessagecenter; using NPOI.SS.Formula.Functions; using NuGet.Packaging; using OpenAuth.App.ServiceApp; using System.Security.Cryptography; namespace OpenAuth.WebApi.Model.mqtt { public class MqttHostedService : IHostedService { private readonly IServiceProvider _serviceProvider; private readonly MqttMessageCenter _mqttCenter; private readonly AirportMaintenanceApp _app; public MqttHostedService(IServiceProvider serviceProvider, MqttMessageCenter mqttCenter, AirportMaintenanceApp app) { _serviceProvider = serviceProvider; _mqttCenter = mqttCenter; _app = app; } public async Task StartAsync(CancellationToken cancellationToken) { using var scope = _serviceProvider.CreateScope(); var handlers = scope.ServiceProvider.GetServices(); // 创建配置构建器 var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile( $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development"}.json", optional: true) .AddEnvironmentVariables(); // 构建配置 var configuration = builder.Build(); // 读取连接字符串 var serverIp = configuration["MQTT:Server"]; var port = configuration["MQTT:Port"]; var username = configuration["MQTT:UserName"]; var password = configuration["MQTT:Password"]; await _mqttCenter.InitializeAsync( handlers, server: serverIp, port: int.Parse(port), clientId: Guid.NewGuid().ToString(), username: username, password: password ); ////查询网关,订阅主题 //var topics = new List(); //var gatewayList = await _app.GetGatewaysnList(); //foreach (var gateway in gatewayList) //{ // topics.AddRange(new[] // { // $"thing/product/{gateway}/osd", // $"thing/product/{gateway}/events", // $"thing/product/{gateway}/requests", // $"thing/product/{gateway}/services_reply", // //$"thing/product/{gateway}/drc/up", // //$"thing/product/{gateway}/drc/down", // $"sys/product/{gateway}/status" // }); //} //var snList = await _app.GetUavSn(); //foreach (var sn in snList) //{ // topics.AddRange(new[] // { // // $"thing/product/1581F8HGX254V00A0BUY/osd", // $"thing/product/{sn}/osd" // }); //} string[] topicList = { "thing/product/+/services_reply", "thing/product/+/events", "thing/product/+/requests", "thing/product/+/osd", "sys/product/+/status" }; await _mqttCenter.SubscribeAsync(topicList); } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; } }