using Application.Domain.Entities; using Hangfire; using Infrastructure.Application.Entites.Settings; using Infrastructure.Data; using Infrastructure.Email; using Infrastructure.Extensions; using Infrastructure.Web; using IoT.Shared.Services; using IoT.UI.Shard; using IoTNode.DeviceServices.FBee; using IoTNode.DeviceServices.Onvif; using IoTNode.DeviceServices.SerialPortManager; using IoTNode.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.Linq; using System.Threading.Tasks; namespace IoTNode { public class Startup : IoTServiceStartup { public Startup(IConfiguration configuration, IWebHostEnvironment env) : base(configuration, env) { } public override void ConfigureServices(IServiceCollection services) { services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddHostedService(o => o.GetService()); services.AddHostedService(o => o.GetService()); services.AddHostedService(o => o.GetService()); services.AddHostedService(o => o.GetService()); base.ConfigureServices(services); } public override void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { base.Configure(app, env, loggerFactory); // //Task.Run(()=> { // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); //}); //Task.Run(() => { // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); //}); //Task.Run(() => { // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); //}); // Task.Run(() => { using var scope = app.ApplicationServices.CreateScope(); var timerRepo = scope.ServiceProvider.GetService>(); var timers = timerRepo.ReadOnlyTable().Where(o => o.Scene.NodeId != null).ToList(); foreach (var timer in timers) { RecurringJob.AddOrUpdate(timer.Id.ToString(), o => o.TimerHanle(timer.Id), timer.Cron, TimeZoneInfo.Local); } var tiggerRepo = scope.ServiceProvider.GetService>(); var tiggers = tiggerRepo.ReadOnlyTable().Where(o => o.Scene.NodeId != null).ToList(); foreach (var tigger in tiggers) { IoTNodeEventHandler.Tiggers.TryAdd(tigger.Id, tigger); } }); } public override void Seed(DbContext dbContext, IServiceProvider serviceProvider, IConfiguration cfg) { var set = dbContext.Set(); set.Add(new Setting { Name = "name", Value = "物联节点", Type = SettingType.Text }); set.Add(new Setting { Name = "logo", Value = "/images/logo.png", Type = SettingType.ImageUrl }); set.Add(new Setting { Name = "copyright", Value = "Copyright © {0} Company. All rights reserved", Type = SettingType.Html }); // var macAddress = Helper.Instance.GetMacAddress(); set.Add(new Setting { Name = "sn", Value = macAddress, Type = SettingType.Text }); set.Add(new Setting { Name = "id", Value = macAddress.Md5(), Type = SettingType.Text }); set.Add(new Setting { Name = "code", Value = "根据id生成的授权码", Type = SettingType.Text }); // var host = "localhost"; var stream = "localhost"; set.Add(new Setting { Name = "debug", Value = "false" }); set.Add(new Setting { Name = "notify:enabled", Value = "true" }); set.Add(new Setting { Name = "notify:host", Value = $"{host}:8011" }); set.Add(new Setting { Name = "timer.seconds", Value = "300" }); set.Add(new Setting { Name = "onvif.timer", Value = "1" }); set.Add(new Setting { Name = "onvif.speed", Value = "0.2" }); set.Add(new Setting { Name = "camera.usr", Value = "admin" }); set.Add(new Setting { Name = "camera.pwd", Value = "dsideal123" }); set.Add(new Setting { Name = "stream.rtmp", Value = stream }); set.Add(new Setting { Name = "stream.flv", Value = $"{stream})" }); set.Add(new Setting { Name = "stream.hls", Value = $"{stream})" }); set.Add(new Setting { Name = "ffmpeg.args", Value = " -y -threads {0} -rtsp_transport tcp -use_wallclock_as_timestamps 1 -stimeout 3000000 -i \"{1}\" -fflags +genpts -c copy -f flv \"{2}\"" }); set.Add(new Setting { Name = "fbee.writelist", Value = "" }); set.Add(new Setting { Name = "camera.writelist", Value = "" }); dbContext.SaveChanges(); var sn = macAddress; dbContext.Set().Add(new Node { Id = $"nodeid-{sn}".ToGuid(), Name = "节点", Number = sn, Image = "/images/classroom.png" }); dbContext.SaveChanges(); base.Seed(dbContext, serviceProvider, cfg); } } }