mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 01:31:19 +00:00
140 lines
6.2 KiB
C#
140 lines
6.2 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Mqtt.Client.AspNetCore.Options;
|
|
using Mqtt.Client.AspNetCore.Services;
|
|
using Mqtt.Client.AspNetCore.Settings;
|
|
using MQTTnet.Client.Options;
|
|
using MyCore.Services;
|
|
using MyCore.Services.Devices;
|
|
using System;
|
|
|
|
namespace MyCore.Service.Extensions
|
|
{
|
|
public static class ServiceCollectionExtension
|
|
{
|
|
|
|
public static IServiceCollection AddMqttClientHostedService(this IServiceCollection services)
|
|
{
|
|
services.AddMqttClientServiceWithConfig(aspOptionBuilder =>
|
|
{
|
|
var clientSettings = AppSettingsProvider.ClientSettings;
|
|
var brokerHostSettings = AppSettingsProvider.BrokerHostSettings;
|
|
|
|
aspOptionBuilder
|
|
.WithCredentials(clientSettings.UserName, clientSettings.Password)
|
|
.WithClientId(clientSettings.Id)
|
|
.WithTcpServer(brokerHostSettings.Host, brokerHostSettings.Port);
|
|
});
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddMqttClientOnlineHostedService(this IServiceCollection services)
|
|
{
|
|
services.AddMqttClientOnlineServiceWithConfig(aspOnlineOptionBuilder =>
|
|
{
|
|
var clientSettings = AppSettingsOnlineProvider.ClientOnlineSettings;
|
|
var brokerHostSettings = AppSettingsOnlineProvider.BrokerHostOnlineSettings;
|
|
|
|
aspOnlineOptionBuilder
|
|
.WithCredentials(clientSettings.UserName, clientSettings.Password)
|
|
.WithClientId(clientSettings.Id)
|
|
.WithTcpServer(brokerHostSettings.Host, brokerHostSettings.Port);
|
|
});
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddMerossClientHostedService(this IServiceCollection services)
|
|
{
|
|
services.AddMerossClientServiceWithConfig(aspOnlineOptionBuilder =>
|
|
{
|
|
/*var clientSettings = AppSettingsMerossProvider.ClientMerossSettings;
|
|
var brokerHostSettings = AppSettingsMerossProvider.BrokerHostMerossSettings;
|
|
|
|
aspOnlineOptionBuilder
|
|
.WithCredentials(clientSettings.UserName, clientSettings.Password)
|
|
.WithClientId(clientSettings.Id)
|
|
.WithTcpServer(brokerHostSettings.Host, brokerHostSettings.Port);*/
|
|
});
|
|
return services;
|
|
}
|
|
|
|
|
|
private static IServiceCollection AddMqttClientServiceWithConfig(this IServiceCollection services, Action<AspCoreMqttClientOptionBuilder> configure)
|
|
{
|
|
// No need as we implement options in service (localhost)
|
|
services.AddSingleton<IMqttClientOptions>(serviceProvider =>
|
|
{
|
|
var optionBuilder = new AspCoreMqttClientOptionBuilder(serviceProvider);
|
|
configure(optionBuilder);
|
|
return optionBuilder.Build();
|
|
});
|
|
services.AddSingleton<HomeDatabaseService>();
|
|
services.AddSingleton<DeviceDatabaseService>();
|
|
services.AddSingleton<GroupDatabaseService>();
|
|
services.AddSingleton<ProviderDatabaseService>();
|
|
services.AddSingleton<RoomDatabaseService>();
|
|
services.AddSingleton<AutomationDatabaseService>();
|
|
services.AddSingleton<AlarmDatabaseService>();
|
|
services.AddSingleton<EventDatabaseService>();
|
|
services.AddSingleton<ActionService>();
|
|
services.AddSingleton<MqttClientService>();
|
|
services.AddSingleton<IHostedService>(serviceProvider =>
|
|
{
|
|
return serviceProvider.GetService<MqttClientService>();
|
|
});
|
|
services.AddSingleton<MqttClientServiceProvider>(serviceProvider =>
|
|
{
|
|
var mqttClientService = serviceProvider.GetService<MqttClientService>();
|
|
var mqttClientServiceProvider = new MqttClientServiceProvider(mqttClientService);
|
|
return mqttClientServiceProvider;
|
|
});
|
|
return services;
|
|
}
|
|
|
|
private static IServiceCollection AddMqttClientOnlineServiceWithConfig(this IServiceCollection services, Action<AspCoreMqttOnlineClientOptionBuilder> configure)
|
|
{
|
|
services.AddSingleton<IMqttClientOptions>(serviceOnlineProvider =>
|
|
{
|
|
var optionBuilder = new AspCoreMqttOnlineClientOptionBuilder(serviceOnlineProvider);
|
|
configure(optionBuilder);
|
|
return optionBuilder.Build();
|
|
});
|
|
/*services.AddSingleton<MqttClientOnlineService>();
|
|
services.AddSingleton<IHostedService>(serviceProvider =>
|
|
{
|
|
return serviceProvider.GetService<MqttClientOnlineService>();
|
|
});
|
|
services.AddSingleton<MqttClientOnlineServiceProvider>(serviceProvider =>
|
|
{
|
|
var mqttOnlineClientService = serviceProvider.GetService<MqttClientOnlineService>();
|
|
var mqttOnlineClientServiceProvider = new MqttClientOnlineServiceProvider(mqttOnlineClientService);
|
|
return mqttOnlineClientServiceProvider;
|
|
});*/
|
|
return services;
|
|
}
|
|
|
|
private static IServiceCollection AddMerossClientServiceWithConfig(this IServiceCollection services, Action<AspCoreMerossClientOptionBuilder> configure)
|
|
{
|
|
/*services.AddSingleton<IMqttClientOptions>(serviceMerossProvider =>
|
|
{
|
|
var optionBuilder = new AspCoreMerossClientOptionBuilder(serviceMerossProvider);
|
|
configure(optionBuilder);
|
|
return optionBuilder.Build();
|
|
});*/
|
|
services.AddSingleton<MqttClientMerossService>();
|
|
services.AddSingleton<IHostedService>(serviceProvider =>
|
|
{
|
|
return serviceProvider.GetService<MqttClientMerossService>();
|
|
});
|
|
services.AddSingleton<MqttClientMerossServiceProvider>(serviceProvider =>
|
|
{
|
|
var merossClientService = serviceProvider.GetService<MqttClientMerossService>();
|
|
var merossServiceProvider = new MqttClientMerossServiceProvider(merossClientService);
|
|
return merossServiceProvider;
|
|
});
|
|
return services;
|
|
}
|
|
|
|
}
|
|
}
|