Former-commit-id: 09292e061a3a491ce9a656e07354d815c03a79dd
TangShanKaiPing
wanggang 6 years ago
parent 1bb1878fe5
commit dd22e7f417

@ -7,11 +7,11 @@ using System;
namespace FBeeService.Controllers namespace FBeeService.Controllers
{ {
[SwaggerTag("红外转发器")] [SwaggerTag("红外转发器")]
public class IRController : BaseDeviceController public class IrController : BaseDeviceController
{ {
private readonly DeviceService _deviceService; private readonly DeviceService _deviceService;
public IRController(IServiceProvider applicationServices, DeviceService deviceService) : base(applicationServices) public IrController(IServiceProvider applicationServices, DeviceService deviceService) : base(applicationServices)
{ {
this._deviceService = deviceService; this._deviceService = deviceService;
} }

@ -46,7 +46,7 @@ namespace FBeeService
try try
{ {
Console.WriteLine("send device info to server"); Console.WriteLine("send device info to server");
this.Connection.SendAsync("ClientToServer", "UpdateDevice", deviceInfo.ToJson()); this.Connection.SendAsync("ClientToServer", "UpdateDeviceInfo", deviceInfo.ToJson(), null);
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -62,7 +62,7 @@ namespace FBeeService
try try
{ {
Console.WriteLine("send device to server"); Console.WriteLine("send device to server");
this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson()); this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson(), null);
} }
catch (Exception ex) catch (Exception ex)
{ {

@ -494,7 +494,7 @@ namespace FBeeService
{ {
deviceInfo.ApiJson = this.GetApiJson("/ColorLight/"); deviceInfo.ApiJson = this.GetApiJson("/ColorLight/");
} }
else if (deviceName == "调色灯") else if (deviceName == "红外转发器")
{ {
deviceInfo.ApiJson = this.GetApiJson("/Ir/"); deviceInfo.ApiJson = this.GetApiJson("/Ir/");
} }

@ -24,7 +24,7 @@ namespace FBeeService
{ {
base.Configure(app, env, loggerFactory); base.Configure(app, env, loggerFactory);
app.ApplicationServices.GetService<DeviceService>().Start(); app.ApplicationServices.GetService<DeviceService>().Start();
app.ApplicationServices.GetService<ClientService>().Connect(); app.ApplicationServices.GetService<ClientService>().Start();
} }
} }
} }

@ -7,6 +7,7 @@
<PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="Microsoft.OpenApi.Readers" Version="1.1.3" />
<PackageReference Include="Vibrant.InfluxDB.Client" Version="4.0.1" /> <PackageReference Include="Vibrant.InfluxDB.Client" Version="4.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -3,6 +3,7 @@ using Infrastructure.Data;
using Infrastructure.Extensions; using Infrastructure.Extensions;
using Infrastructure.Web.SignalR; using Infrastructure.Web.SignalR;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Readers;
using System; using System;
using System.Linq; using System.Linq;
@ -19,13 +20,13 @@ namespace IoTCenter.Services
public override void ClientToServer(string method, string message, string connectionId) public override void ClientToServer(string method, string message, string connectionId)
{ {
if (method == "UpdateDevice") if (method == "UpdateDeviceInfo")
{ {
this.UpdateDevice(message); this.UpdateDeviceInfo(message);
} }
else if (method == "UpdateDeviceInfo") else if (method == "UpdateDevice")
{ {
this.UpdateDeviceInfo(message); this.UpdateDevice(message);
} }
else if (message == "ApiCallback") else if (message == "ApiCallback")
{ {
@ -33,72 +34,116 @@ namespace IoTCenter.Services
} }
} }
private void UpdateDevice(string message) private void UpdateDeviceInfo(string message)
{ {
var newDevice = message.FromJson<Device>(); var newDeviceInfo = message.FromJson<DeviceInfo>();
using (var scope = this._applicationService.CreateScope()) using (var scope = this._applicationService.CreateScope())
{ {
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>(); var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDevice.InfoNumber); var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.Number);
if (deviceInfo == null) if (deviceInfo == null)
{ {
deviceInfo = new DeviceInfo deviceInfo = new DeviceInfo().From(newDeviceInfo);
{
Name = newDevice.Name,
Number = newDevice.InfoNumber
};
deviceInfoRepo.Add(deviceInfo); deviceInfoRepo.Add(deviceInfo);
if (!string.IsNullOrEmpty(deviceInfo.ApiJson))
{
this.UpdateApi(deviceInfo);
}
deviceInfoRepo.SaveChanges(); deviceInfoRepo.SaveChanges();
} }
var nodeRepo = scope.ServiceProvider.GetService<IRepository<Node>>(); }
var node = nodeRepo.Table().FirstOrDefault(o => o.Number == newDevice.NodeNumber); }
if (node == null)
{ private void UpdateDevice(string message)
node = new Node
{ {
Number = newDevice.NodeNumber, //var newDevice = message.FromJson<Device>();
Name = newDevice.NodeNumber //using (var scope = this._applicationService.CreateScope())
}; //{
nodeRepo.Add(node); // var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
nodeRepo.SaveChanges(); // var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDevice.InfoNumber);
// if (deviceInfo == null)
// {
// deviceInfo = new DeviceInfo
// {
// Name = newDevice.Name,
// Number = newDevice.InfoNumber
// };
// deviceInfoRepo.Add(deviceInfo);
// deviceInfoRepo.SaveChanges();
// }
// var nodeRepo = scope.ServiceProvider.GetService<IRepository<Node>>();
// var node = nodeRepo.Table().FirstOrDefault(o => o.Number == newDevice.NodeNumber);
// if (node == null)
// {
// node = new Node
// {
// Number = newDevice.NodeNumber,
// Name = newDevice.NodeNumber
// };
// nodeRepo.Add(node);
// nodeRepo.SaveChanges();
// }
// var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
// var device = deviceRepo.Table().FirstOrDefault(o => o.Number == newDevice.Number);
// if (device == null)
// {
// device = new Device
// {
// };
// }
//}
} }
var deviceRepo = scope.ServiceProvider.GetService<IRepository<Device>>();
var device = deviceRepo.Table().FirstOrDefault(o => o.Number == newDevice.Number); public void ApiCallback(string message, string connectionId)
if (device == null)
{ {
device = new Device if (!string.IsNullOrEmpty(connectionId))
{ {
}; this.ServerToClient(connectionId, "ApiCallback", message);
}
} }
Console.WriteLine(message);
} }
private void UpdateDeviceInfo(string message) private void UpdateApi(DeviceInfo deviceInfo)
{ {
var newDeviceInfo = message.FromJson<Device>(); try
using (var scope = this._applicationService.CreateScope())
{ {
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>(); var reader = new OpenApiStringReader(new OpenApiReaderSettings { }).Read(deviceInfo.ApiJson, out OpenApiDiagnostic diagnostic);
var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.InfoNumber); foreach (var path in reader.Paths)
if (deviceInfo == null)
{ {
deviceInfo = new DeviceInfo foreach (var operation in path.Value.Operations)
{ {
//Name = newDevice.Name, if (!deviceInfo.Apis.Any(o => o.Name == operation.Value.Summary))
//Number = newDevice.InfoNumber {
var postion = path.Key.LastIndexOf('/') + 1;
var api = new Api
{
Path = path.Key.Substring(0, postion),
Command = path.Key.Substring(postion),
Name = operation.Value.Summary,
Method = operation.Key.ToString()
}; };
deviceInfoRepo.Add(deviceInfo); deviceInfo.Apis.Add(api);
deviceInfoRepo.SaveChanges(); foreach (var parameter in operation.Value.Parameters)
{
if (!api.Parameters.Any(o => o.Name == parameter.Name))
{
api.Parameters.Add(new Parameter
{
Name = parameter.Name,
Description = parameter.Description,
Required = parameter.Required,
Type = parameter.Schema.Type,
Minimum = parameter.Schema.Minimum?.ToString(),
Maxinum = parameter.Schema.Maximum?.ToString()
});
} }
} }
} }
}
public void ApiCallback(string message, string connectionId) }
{ }
if (!string.IsNullOrEmpty(connectionId)) catch (Exception ex)
{ {
this.ServerToClient(connectionId, "ApiCallback", message); ex.PrintStack();
} }
} }
} }

Loading…
Cancel
Save