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

@ -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<ISettingService>();
}
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<bool>("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
{

@ -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<ISettingService>();
}
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<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)
{
var scope = _applicationServices.CreateScope();

@ -27,8 +27,8 @@ namespace IoTNode.DeviceServices.FBee
{
private readonly ConcurrentDictionary<string, TcpClientWrapper> Clients = new ConcurrentDictionary<string, TcpClientWrapper>();
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(',');

@ -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);
}

@ -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)
{
}

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

Loading…
Cancel
Save