using DbusSmsForward.Helper; using DbusSmsForward.Models; using DbusSmsForward.ModemHelper; using DbusSmsForward.Notifications; using DbusSmsForward.Services; using DbusSmsForward.SettingModel; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System.Text.Json; AppCommand command = CommandLineParser.Parse(args); if (command.PrintSampleConfig) { DbusSmsForwardOptions sample = SampleConfigFactory.Create(); Console.WriteLine(JsonSerializer.Serialize(sample, SourceGenerationContext.Default.DbusSmsForwardOptions)); return; } HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); builder.Services.Configure(builder.Configuration); builder.Services.AddSingleton(sp => { DbusSmsForwardOptions options = new(); builder.Configuration.Bind(options); LegacyConfigurationBridge.Apply(builder.Configuration, options); CommandLineConfigurationApplier.Apply(command, options); return options; }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddHostedService(); builder.Logging.ClearProviders(); builder.Logging.AddSimpleConsole(); using IHost host = builder.Build(); DbusSmsForwardOptions resolvedOptions = host.Services.GetRequiredService(); if (command.ValidateConfig || resolvedOptions.Daemon.ValidateOnStartup) { ConfigurationValidator.Validate(resolvedOptions, command); } if (string.Equals(command.Name, "send", StringComparison.OrdinalIgnoreCase)) { await SendSmsAsync(host.Services, command); return; } await host.RunAsync(); static async Task SendSmsAsync(IServiceProvider services, AppCommand command) { if (string.IsNullOrWhiteSpace(command.PhoneNumber) || string.IsNullOrWhiteSpace(command.Message)) { throw new InvalidOperationException("send 模式需要 --to 和 --text 参数。 "); } ModemManagerHelper modemManagerHelper = services.GetRequiredService(); bool success = await modemManagerHelper.SendSms(command.PhoneNumber, command.Message); Console.WriteLine(success ? "短信已发送" : "短信发送失败"); }