From 3265ae92b1e8725def455caf9f88da71490daf71 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Sun, 15 Mar 2020 23:30:53 +0800 Subject: [PATCH] update Former-commit-id: e4e8950bfb6d7177acfee59f1e67d66cde7778a4 --- .../Services/IoTNode/IoTNodeClient.cs | 25 +++++++++++-------- .../DeviceServices/BaseDeviceService.cs | 23 +++++------------ .../DeviceServices/FBee/FBeeService.cs | 6 ++--- .../DeviceServices/Onvif/OnvifService.cs | 20 +++++++-------- .../SerialPort/SerialPortService.cs | 4 +-- projects/IoTNode/Startup.cs | 24 +++++++++--------- 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs index 7f76e657..3fb44330 100644 --- a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs +++ b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs @@ -1,5 +1,6 @@ using Application.Domain.Entities; using Application.Models; +using Infrastructure.Application.Services.Settings; using Infrastructure.Data; using Infrastructure.Domain; using Infrastructure.Events; @@ -25,14 +26,15 @@ namespace IoT.Shared.Services private string _notifyHost; private HubConnection Connection; private readonly IServiceProvider applicationServices; - private readonly IConfiguration _cfg; - public IoTNodeClient(IServiceProvider applicationServices, IConfiguration configuration) + public IoTNodeClient(IServiceProvider applicationServices) { this.applicationServices = applicationServices; - this._cfg = configuration; } - + private ISettingService GetSettingService() + { + return this.applicationServices.GetRequiredService(); + } public Task StartAsync(CancellationToken cancellationToken) { Task.Run(async () => @@ -54,11 +56,13 @@ namespace IoT.Shared.Services [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")] public void Connect() { - if (this._cfg.GetValue("notify:enabled", false)) + var enable = this.GetSettingService().Get("notify:enabled").Value; + if (enable == "true") { Console.WriteLine("notify is enabled"); try { + var host = this.GetSettingService().Get("notify:host").Value; if (Connection == null) { Console.WriteLine("connection is null"); @@ -67,7 +71,7 @@ namespace IoT.Shared.Services if (Connection.State == HubConnectionState.Disconnected) { Console.WriteLine("start connect"); - if (this._notifyHost != this._cfg["notify:host"]) + if (this._notifyHost != host) { InitConnection(); } @@ -76,7 +80,7 @@ namespace IoT.Shared.Services } else { - if (this._notifyHost != this._cfg["notify:host"]) + if (this._notifyHost != host) { this.ReConnect(null); } @@ -120,8 +124,9 @@ namespace IoT.Shared.Services private void InitConnection() { - this._notifyHost = this._cfg["notify:host"]; - var url = $"http://{this._notifyHost}/hub?group={this._cfg["sn"]}"; + var settingService = this.GetSettingService(); + this._notifyHost = settingService.Get("notify:host").Value; + var url = $"http://{this._notifyHost}/hub?group={settingService.Get("sn").Value}"; Console.WriteLine($"init connection for {url}"); if (this.Connection != null) { @@ -146,7 +151,7 @@ namespace IoT.Shared.Services { if (this.Connection != null && this.Connection.State == HubConnectionState.Connected) { - this.Connection.SendAsync(Methods.ClientToServer, method, data.ToJson(), to, from ?? this._cfg["sn"]); + this.Connection.SendAsync(Methods.ClientToServer, method, data.ToJson(), to, from ??this.GetSettingService().Get("sn").Value); } else { diff --git a/projects/IoTNode/DeviceServices/BaseDeviceService.cs b/projects/IoTNode/DeviceServices/BaseDeviceService.cs index 6cddb996..9aef01de 100644 --- a/projects/IoTNode/DeviceServices/BaseDeviceService.cs +++ b/projects/IoTNode/DeviceServices/BaseDeviceService.cs @@ -17,14 +17,15 @@ namespace IoTNode.DeviceServices public abstract class BaseDeviceService : IHostedService { internal readonly IServiceProvider _applicationServices; - internal readonly ISettingService _settingService; - public BaseDeviceService(IServiceProvider applicationServices, ISettingService settingService) + public BaseDeviceService(IServiceProvider applicationServices) { this._applicationServices = applicationServices; - this._settingService = settingService; } - + protected ISettingService GetSettingService() + { + return this._applicationServices.GetRequiredService(); + } public virtual Task StartAsync(CancellationToken cancellationToken) { Task.Run(async () => @@ -39,7 +40,7 @@ namespace IoTNode.DeviceServices { ex.PrintStack(); } - await Task.Delay(Convert.ToInt32(_settingService.Get("timer.seconds").Value) * 1000).ConfigureAwait(true); + await Task.Delay(Convert.ToInt32(GetSettingService().Get("timer.seconds").Value) * 1000).ConfigureAwait(true); } }); return Task.CompletedTask; @@ -86,18 +87,6 @@ namespace IoTNode.DeviceServices } } - //public void SendDataToServer(List list) - //{ - // using var scope = _applicationServices.CreateScope(); - // var iotNodeClient = scope.ServiceProvider.GetService(); - // iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", list, null); - // var eventPubliser = scope.ServiceProvider.GetService(); - // foreach (var data in list) - // { - // eventPubliser.Publish(new EntityUpdatedEvent(data)); - // } - //} - public Product UpdateProduct(string productName, string productNumber, string path, string categoryNumber, string productIcon) { var scope = _applicationServices.CreateScope(); diff --git a/projects/IoTNode/DeviceServices/FBee/FBeeService.cs b/projects/IoTNode/DeviceServices/FBee/FBeeService.cs index 1f0da0c8..08923a63 100644 --- a/projects/IoTNode/DeviceServices/FBee/FBeeService.cs +++ b/projects/IoTNode/DeviceServices/FBee/FBeeService.cs @@ -27,8 +27,8 @@ namespace IoTNode.DeviceServices.FBee { private readonly ConcurrentDictionary Clients = new ConcurrentDictionary(); - public FBeeService(IServiceProvider applicationServices, ISettingService settingService) - : base(applicationServices, settingService) + public FBeeService(IServiceProvider applicationServices) + : base(applicationServices) { } @@ -156,7 +156,7 @@ namespace IoTNode.DeviceServices.FBee { var sn = Regex.Match(result, @"SN:([^\s]*)").Groups[1].Value; var ip = Regex.Match(result, @"IP:([^\s]*)").Groups[1].Value; - var writeList = this._settingService.Get("fbee.writelist").Value; + var writeList = GetSettingService().Get("fbee.writelist").Value; if (!string.IsNullOrEmpty(writeList)) { var snList = writeList.Split(','); diff --git a/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs b/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs index bf792432..a47cad43 100644 --- a/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs +++ b/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs @@ -29,8 +29,8 @@ namespace IoTNode.DeviceServices.Onvif private readonly IHttpClientFactory _httpClientFactory; private readonly IOnvifDeviceManagement _onvifDeviceManagement; - public OnvifService(IServiceProvider applicationServices, ISettingService settingService, IWebHostEnvironment env, IHttpClientFactory httpClientFactory) - : base(applicationServices, settingService) + public OnvifService(IServiceProvider applicationServices, IWebHostEnvironment env, IHttpClientFactory httpClientFactory) + : base(applicationServices) { this._env = env; this._httpClientFactory = httpClientFactory; @@ -87,6 +87,7 @@ namespace IoTNode.DeviceServices.Onvif { try { + var settingService = GetSettingService(); var list = this._onvifDeviceManagement.Discovery(); foreach (var ipCamera in list) { @@ -94,7 +95,7 @@ namespace IoTNode.DeviceServices.Onvif { continue; } - var writeList = this._settingService.Get("camera.writelist").Value; + var writeList = GetSettingService().Get("camera.writelist").Value; if (!string.IsNullOrEmpty(writeList)) { var snList = writeList.Split(','); @@ -143,10 +144,7 @@ namespace IoTNode.DeviceServices.Onvif this.UpdateData(deviceRepo, device, device.CreateData("Push", pushValue, DeviceDataType.String, "推流")); this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", DeviceDataType.String, "录像")); this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.file", file, DeviceDataType.String, "ffmpeg路径", hidden: true)); - this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", this._settingService.Get("ffmpeg.args").Value, DeviceDataType.String, "ffmpeg.args", hidden: true)); - //this.UpdateData(deviceRepo, device, device.CreateData("rtmp", $"rtmp://{this._cfg["stream.rtmp"]}/live/{ipCamera.Id}", DeviceDataType.String, "rtmp")); - //this.UpdateData(deviceRepo, device, device.CreateData("flv", $"http://{this._cfg["stream.flv"]}/live/{ipCamera.Id}.flv", DeviceDataType.String, "flv")); - //this.UpdateData(deviceRepo, device, device.CreateData("hls", $"http://{this._cfg["stream.hls"]}/live/{ipCamera.Id}.m3u8", DeviceDataType.String, "hls")); + this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", settingService.Get("ffmpeg.args").Value, DeviceDataType.String, "ffmpeg.args", hidden: true)); } var profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl); var needAuth = false; @@ -154,8 +152,8 @@ namespace IoTNode.DeviceServices.Onvif if (profiles == "") { needAuth = true; - device.UserName = device.UserName ?? this._settingService.Get("camera.usr").Value; - device.Password = device.Password ?? this._settingService.Get("camera.pwd").Value; + device.UserName = device.UserName ?? settingService.Get("camera.usr").Value; + device.Password = device.Password ?? settingService.Get("camera.pwd").Value; this.UpdateDevice(deviceRepo, device); profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl, device.UserName, device.Password); if (profiles == "") @@ -318,7 +316,7 @@ namespace IoTNode.DeviceServices.Onvif var rtspUrl = $"rtsp://{(needAuth ? $"{camera.UserName}:{camera.Password}@" : "")}{streamUri.Substring(7)}"; var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}"; var file = camera.GetData("ffmpeg.file")?.Value; - var rtmp = $"rtmp://{this._settingService.Get("stream.rtmp").Value}/live/{camera.Number}"; //camera.Data.FirstOrDefault(o => o.Key == "rtmp").Value; + var rtmp = $"rtmp://{GetSettingService().Get("stream.rtmp").Value}/live/{camera.Number}"; //camera.Data.FirstOrDefault(o => o.Key == "rtmp").Value; Console.WriteLine(file); var arguments = camera.Data.FirstOrDefault(o => o.Key == "ffmpeg.args").Value; Process process = null; @@ -385,7 +383,7 @@ namespace IoTNode.DeviceServices.Onvif { if (!string.IsNullOrEmpty(e.Data)) { - if (this._settingService.Get("debug").Value == "true") + if (GetSettingService().Get("debug").Value == "true") { Console.WriteLine(e.Data); } diff --git a/projects/IoTNode/DeviceServices/SerialPort/SerialPortService.cs b/projects/IoTNode/DeviceServices/SerialPort/SerialPortService.cs index 13dd1882..18401554 100644 --- a/projects/IoTNode/DeviceServices/SerialPort/SerialPortService.cs +++ b/projects/IoTNode/DeviceServices/SerialPort/SerialPortService.cs @@ -18,8 +18,8 @@ namespace IoTNode.DeviceServices.SerialPortManager private const string _productNumber = "serialport"; private static object lockObject = new object(); - public SerialPortService(IServiceProvider applicationServices, ISettingService settingService) - : base(applicationServices, settingService) + public SerialPortService(IServiceProvider applicationServices) + : base(applicationServices) { } diff --git a/projects/IoTNode/Startup.cs b/projects/IoTNode/Startup.cs index c8af1a74..dd9bdcb5 100644 --- a/projects/IoTNode/Startup.cs +++ b/projects/IoTNode/Startup.cs @@ -38,10 +38,10 @@ namespace IoTNode services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - //services.AddHostedService(o => o.GetService()); - //services.AddHostedService(o => o.GetService()); - //services.AddHostedService(o => o.GetService()); 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); } @@ -50,15 +50,15 @@ namespace IoTNode { 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(()=> { + // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); + //}); + //Task.Run(() => { + // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); + //}); + //Task.Run(() => { + // app.ApplicationServices.GetRequiredService().StartAsync(new CancellationToken()); + //}); // Task.Run(() => {