Former-commit-id: e4e8950bfb6d7177acfee59f1e67d66cde7778a4
TangShanKaiPing
wanggang 5 years ago
parent d0fb1e85fb
commit 3265ae92b1

@ -1,5 +1,6 @@
using Application.Domain.Entities; using Application.Domain.Entities;
using Application.Models; using Application.Models;
using Infrastructure.Application.Services.Settings;
using Infrastructure.Data; using Infrastructure.Data;
using Infrastructure.Domain; using Infrastructure.Domain;
using Infrastructure.Events; using Infrastructure.Events;
@ -25,14 +26,15 @@ namespace IoT.Shared.Services
private string _notifyHost; private string _notifyHost;
private HubConnection Connection; private HubConnection Connection;
private readonly IServiceProvider applicationServices; private readonly IServiceProvider applicationServices;
private readonly IConfiguration _cfg;
public IoTNodeClient(IServiceProvider applicationServices, IConfiguration configuration) public IoTNodeClient(IServiceProvider applicationServices)
{ {
this.applicationServices = applicationServices; this.applicationServices = applicationServices;
this._cfg = configuration;
} }
private ISettingService GetSettingService()
{
return this.applicationServices.GetRequiredService<ISettingService>();
}
public Task StartAsync(CancellationToken cancellationToken) public Task StartAsync(CancellationToken cancellationToken)
{ {
Task.Run(async () => Task.Run(async () =>
@ -54,11 +56,13 @@ namespace IoT.Shared.Services
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")] [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public void Connect() public void Connect()
{ {
if (this._cfg.GetValue<bool>("notify:enabled", false)) var enable = this.GetSettingService().Get("notify:enabled").Value;
if (enable == "true")
{ {
Console.WriteLine("notify is enabled"); Console.WriteLine("notify is enabled");
try try
{ {
var host = this.GetSettingService().Get("notify:host").Value;
if (Connection == null) if (Connection == null)
{ {
Console.WriteLine("connection is null"); Console.WriteLine("connection is null");
@ -67,7 +71,7 @@ namespace IoT.Shared.Services
if (Connection.State == HubConnectionState.Disconnected) if (Connection.State == HubConnectionState.Disconnected)
{ {
Console.WriteLine("start connect"); Console.WriteLine("start connect");
if (this._notifyHost != this._cfg["notify:host"]) if (this._notifyHost != host)
{ {
InitConnection(); InitConnection();
} }
@ -76,7 +80,7 @@ namespace IoT.Shared.Services
} }
else else
{ {
if (this._notifyHost != this._cfg["notify:host"]) if (this._notifyHost != host)
{ {
this.ReConnect(null); this.ReConnect(null);
} }
@ -120,8 +124,9 @@ namespace IoT.Shared.Services
private void InitConnection() private void InitConnection()
{ {
this._notifyHost = this._cfg["notify:host"]; var settingService = this.GetSettingService();
var url = $"http://{this._notifyHost}/hub?group={this._cfg["sn"]}"; this._notifyHost = settingService.Get("notify:host").Value;
var url = $"http://{this._notifyHost}/hub?group={settingService.Get("sn").Value}";
Console.WriteLine($"init connection for {url}"); Console.WriteLine($"init connection for {url}");
if (this.Connection != null) if (this.Connection != null)
{ {
@ -146,7 +151,7 @@ namespace IoT.Shared.Services
{ {
if (this.Connection != null && this.Connection.State == HubConnectionState.Connected) 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 else
{ {

@ -17,14 +17,15 @@ namespace IoTNode.DeviceServices
public abstract class BaseDeviceService : IHostedService public abstract class BaseDeviceService : IHostedService
{ {
internal readonly IServiceProvider _applicationServices; internal readonly IServiceProvider _applicationServices;
internal readonly ISettingService _settingService;
public BaseDeviceService(IServiceProvider applicationServices, ISettingService settingService) public BaseDeviceService(IServiceProvider applicationServices)
{ {
this._applicationServices = applicationServices; this._applicationServices = applicationServices;
this._settingService = settingService;
} }
protected ISettingService GetSettingService()
{
return this._applicationServices.GetRequiredService<ISettingService>();
}
public virtual Task StartAsync(CancellationToken cancellationToken) public virtual Task StartAsync(CancellationToken cancellationToken)
{ {
Task.Run(async () => Task.Run(async () =>
@ -39,7 +40,7 @@ namespace IoTNode.DeviceServices
{ {
ex.PrintStack(); 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; return Task.CompletedTask;
@ -86,18 +87,6 @@ namespace IoTNode.DeviceServices
} }
} }
//public void SendDataToServer(List<Data> list)
//{
// using var scope = _applicationServices.CreateScope();
// var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
// iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", list, null);
// var eventPubliser = scope.ServiceProvider.GetService<IEventPublisher>();
// foreach (var data in list)
// {
// eventPubliser.Publish(new EntityUpdatedEvent<Data>(data));
// }
//}
public Product UpdateProduct(string productName, string productNumber, string path, string categoryNumber, string productIcon) public Product UpdateProduct(string productName, string productNumber, string path, string categoryNumber, string productIcon)
{ {
var scope = _applicationServices.CreateScope(); var scope = _applicationServices.CreateScope();

@ -27,8 +27,8 @@ namespace IoTNode.DeviceServices.FBee
{ {
private readonly ConcurrentDictionary<string, TcpClientWrapper> Clients = new ConcurrentDictionary<string, TcpClientWrapper>(); private readonly ConcurrentDictionary<string, TcpClientWrapper> Clients = new ConcurrentDictionary<string, TcpClientWrapper>();
public FBeeService(IServiceProvider applicationServices, ISettingService settingService) public FBeeService(IServiceProvider applicationServices)
: base(applicationServices, settingService) : base(applicationServices)
{ {
} }
@ -156,7 +156,7 @@ namespace IoTNode.DeviceServices.FBee
{ {
var sn = Regex.Match(result, @"SN:([^\s]*)").Groups[1].Value; var sn = Regex.Match(result, @"SN:([^\s]*)").Groups[1].Value;
var ip = Regex.Match(result, @"IP:([^\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)) if (!string.IsNullOrEmpty(writeList))
{ {
var snList = writeList.Split(','); var snList = writeList.Split(',');

@ -29,8 +29,8 @@ namespace IoTNode.DeviceServices.Onvif
private readonly IHttpClientFactory _httpClientFactory; private readonly IHttpClientFactory _httpClientFactory;
private readonly IOnvifDeviceManagement _onvifDeviceManagement; private readonly IOnvifDeviceManagement _onvifDeviceManagement;
public OnvifService(IServiceProvider applicationServices, ISettingService settingService, IWebHostEnvironment env, IHttpClientFactory httpClientFactory) public OnvifService(IServiceProvider applicationServices, IWebHostEnvironment env, IHttpClientFactory httpClientFactory)
: base(applicationServices, settingService) : base(applicationServices)
{ {
this._env = env; this._env = env;
this._httpClientFactory = httpClientFactory; this._httpClientFactory = httpClientFactory;
@ -87,6 +87,7 @@ namespace IoTNode.DeviceServices.Onvif
{ {
try try
{ {
var settingService = GetSettingService();
var list = this._onvifDeviceManagement.Discovery(); var list = this._onvifDeviceManagement.Discovery();
foreach (var ipCamera in list) foreach (var ipCamera in list)
{ {
@ -94,7 +95,7 @@ namespace IoTNode.DeviceServices.Onvif
{ {
continue; continue;
} }
var writeList = this._settingService.Get("camera.writelist").Value; var writeList = GetSettingService().Get("camera.writelist").Value;
if (!string.IsNullOrEmpty(writeList)) if (!string.IsNullOrEmpty(writeList))
{ {
var snList = writeList.Split(','); 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("Push", pushValue, DeviceDataType.String, "推流"));
this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", 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.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("ffmpeg.args", 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"));
} }
var profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl); var profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl);
var needAuth = false; var needAuth = false;
@ -154,8 +152,8 @@ namespace IoTNode.DeviceServices.Onvif
if (profiles == "") if (profiles == "")
{ {
needAuth = true; needAuth = true;
device.UserName = device.UserName ?? this._settingService.Get("camera.usr").Value; device.UserName = device.UserName ?? settingService.Get("camera.usr").Value;
device.Password = device.Password ?? this._settingService.Get("camera.pwd").Value; device.Password = device.Password ?? settingService.Get("camera.pwd").Value;
this.UpdateDevice(deviceRepo, device); this.UpdateDevice(deviceRepo, device);
profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl, device.UserName, device.Password); profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl, device.UserName, device.Password);
if (profiles == "") if (profiles == "")
@ -318,7 +316,7 @@ namespace IoTNode.DeviceServices.Onvif
var rtspUrl = $"rtsp://{(needAuth ? $"{camera.UserName}:{camera.Password}@" : "")}{streamUri.Substring(7)}"; var rtspUrl = $"rtsp://{(needAuth ? $"{camera.UserName}:{camera.Password}@" : "")}{streamUri.Substring(7)}";
var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}"; var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
var file = camera.GetData("ffmpeg.file")?.Value; 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); Console.WriteLine(file);
var arguments = camera.Data.FirstOrDefault(o => o.Key == "ffmpeg.args").Value; var arguments = camera.Data.FirstOrDefault(o => o.Key == "ffmpeg.args").Value;
Process process = null; Process process = null;
@ -385,7 +383,7 @@ namespace IoTNode.DeviceServices.Onvif
{ {
if (!string.IsNullOrEmpty(e.Data)) if (!string.IsNullOrEmpty(e.Data))
{ {
if (this._settingService.Get("debug").Value == "true") if (GetSettingService().Get("debug").Value == "true")
{ {
Console.WriteLine(e.Data); Console.WriteLine(e.Data);
} }

@ -18,8 +18,8 @@ namespace IoTNode.DeviceServices.SerialPortManager
private const string _productNumber = "serialport"; private const string _productNumber = "serialport";
private static object lockObject = new object(); private static object lockObject = new object();
public SerialPortService(IServiceProvider applicationServices, ISettingService settingService) public SerialPortService(IServiceProvider applicationServices)
: base(applicationServices, settingService) : base(applicationServices)
{ {
} }

@ -38,10 +38,10 @@ namespace IoTNode
services.AddSingleton<IoTNodeClient>(); services.AddSingleton<IoTNodeClient>();
services.AddSingleton<OnvifService>(); services.AddSingleton<OnvifService>();
services.AddSingleton<FBeeService>(); services.AddSingleton<FBeeService>();
//services.AddHostedService(o => o.GetService<IoTNodeClient>());
//services.AddHostedService(o => o.GetService<OnvifService>());
//services.AddHostedService(o => o.GetService<FBeeService>());
services.AddSingleton<SerialPortService>(); services.AddSingleton<SerialPortService>();
services.AddHostedService(o => o.GetService<IoTNodeClient>());
services.AddHostedService(o => o.GetService<OnvifService>());
services.AddHostedService(o => o.GetService<FBeeService>());
services.AddHostedService(o => o.GetService<SerialPortService>()); services.AddHostedService(o => o.GetService<SerialPortService>());
base.ConfigureServices(services); base.ConfigureServices(services);
} }
@ -50,15 +50,15 @@ namespace IoTNode
{ {
base.Configure(app, env, loggerFactory); base.Configure(app, env, loggerFactory);
// //
Task.Run(()=> { //Task.Run(()=> {
app.ApplicationServices.GetRequiredService<IoTNodeClient>().StartAsync(new CancellationToken()); // app.ApplicationServices.GetRequiredService<IoTNodeClient>().StartAsync(new CancellationToken());
}); //});
Task.Run(() => { //Task.Run(() => {
app.ApplicationServices.GetRequiredService<OnvifService>().StartAsync(new CancellationToken()); // app.ApplicationServices.GetRequiredService<OnvifService>().StartAsync(new CancellationToken());
}); //});
Task.Run(() => { //Task.Run(() => {
app.ApplicationServices.GetRequiredService<FBeeService>().StartAsync(new CancellationToken()); // app.ApplicationServices.GetRequiredService<FBeeService>().StartAsync(new CancellationToken());
}); //});
// //
Task.Run(() => Task.Run(() =>
{ {

Loading…
Cancel
Save