diff --git a/projects/IoT/IoTServices/FBeeService/Controllers/IRController.cs b/projects/IoT/IoTServices/FBeeService/Controllers/IRController.cs index c2280d21..fccd3497 100644 --- a/projects/IoT/IoTServices/FBeeService/Controllers/IRController.cs +++ b/projects/IoT/IoTServices/FBeeService/Controllers/IRController.cs @@ -7,11 +7,11 @@ using System; namespace FBeeService.Controllers { [SwaggerTag("红外转发器")] - public class IRController : BaseDeviceController + public class IrController : BaseDeviceController { private readonly DeviceService _deviceService; - public IRController(IServiceProvider applicationServices, DeviceService deviceService) : base(applicationServices) + public IrController(IServiceProvider applicationServices, DeviceService deviceService) : base(applicationServices) { this._deviceService = deviceService; } diff --git a/projects/IoT/IoTServices/FBeeService/Infrastructure/ClientService.cs b/projects/IoT/IoTServices/FBeeService/Infrastructure/ClientService.cs index 1c73b5e0..34e539b7 100644 --- a/projects/IoT/IoTServices/FBeeService/Infrastructure/ClientService.cs +++ b/projects/IoT/IoTServices/FBeeService/Infrastructure/ClientService.cs @@ -46,7 +46,7 @@ namespace FBeeService try { 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) { @@ -62,7 +62,7 @@ namespace FBeeService try { Console.WriteLine("send device to server"); - this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson()); + this.Connection.SendAsync("ClientToServer", "UpdateDevice", device.ToJson(), null); } catch (Exception ex) { diff --git a/projects/IoT/IoTServices/FBeeService/Infrastructure/DeviceService.cs b/projects/IoT/IoTServices/FBeeService/Infrastructure/DeviceService.cs index 3e6c9b98..f17411df 100644 --- a/projects/IoT/IoTServices/FBeeService/Infrastructure/DeviceService.cs +++ b/projects/IoT/IoTServices/FBeeService/Infrastructure/DeviceService.cs @@ -494,7 +494,7 @@ namespace FBeeService { deviceInfo.ApiJson = this.GetApiJson("/ColorLight/"); } - else if (deviceName == "调色灯") + else if (deviceName == "红外转发器") { deviceInfo.ApiJson = this.GetApiJson("/Ir/"); } diff --git a/projects/IoT/IoTServices/FBeeService/Startup.cs b/projects/IoT/IoTServices/FBeeService/Startup.cs index a5fcf4ae..b2ba2ea0 100644 --- a/projects/IoT/IoTServices/FBeeService/Startup.cs +++ b/projects/IoT/IoTServices/FBeeService/Startup.cs @@ -24,7 +24,7 @@ namespace FBeeService { base.Configure(app, env, loggerFactory); app.ApplicationServices.GetService().Start(); - app.ApplicationServices.GetService().Connect(); + app.ApplicationServices.GetService().Start(); } } } \ No newline at end of file diff --git a/projects/IoTCenter/IoTCenter.csproj b/projects/IoTCenter/IoTCenter.csproj index 3f8f107f..6c851d80 100644 --- a/projects/IoTCenter/IoTCenter.csproj +++ b/projects/IoTCenter/IoTCenter.csproj @@ -7,6 +7,7 @@ + diff --git a/projects/IoTCenter/Services/PageHub.cs b/projects/IoTCenter/Services/PageHub.cs index d9a4082e..1563f835 100644 --- a/projects/IoTCenter/Services/PageHub.cs +++ b/projects/IoTCenter/Services/PageHub.cs @@ -3,6 +3,7 @@ using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web.SignalR; using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Readers; using System; using System.Linq; @@ -19,13 +20,13 @@ namespace IoTCenter.Services 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") { @@ -33,65 +34,64 @@ namespace IoTCenter.Services } } - private void UpdateDevice(string message) + private void UpdateDeviceInfo(string message) { - var newDevice = message.FromJson(); + var newDeviceInfo = message.FromJson(); using (var scope = this._applicationService.CreateScope()) { var deviceInfoRepo = scope.ServiceProvider.GetService>(); - var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDevice.InfoNumber); + var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.Number); if (deviceInfo == null) { - deviceInfo = new DeviceInfo - { - Name = newDevice.Name, - Number = newDevice.InfoNumber - }; + deviceInfo = new DeviceInfo().From(newDeviceInfo); deviceInfoRepo.Add(deviceInfo); - deviceInfoRepo.SaveChanges(); - } - var nodeRepo = scope.ServiceProvider.GetService>(); - var node = nodeRepo.Table().FirstOrDefault(o => o.Number == newDevice.NodeNumber); - if (node == null) - { - node = new Node + if (!string.IsNullOrEmpty(deviceInfo.ApiJson)) { - Number = newDevice.NodeNumber, - Name = newDevice.NodeNumber - }; - nodeRepo.Add(node); - nodeRepo.SaveChanges(); - } - var deviceRepo = scope.ServiceProvider.GetService>(); - var device = deviceRepo.Table().FirstOrDefault(o => o.Number == newDevice.Number); - if (device == null) - { - device = new Device - { - }; + this.UpdateApi(deviceInfo); + } + deviceInfoRepo.SaveChanges(); } } - Console.WriteLine(message); } - private void UpdateDeviceInfo(string message) + private void UpdateDevice(string message) { - var newDeviceInfo = message.FromJson(); - using (var scope = this._applicationService.CreateScope()) - { - var deviceInfoRepo = scope.ServiceProvider.GetService>(); - var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.InfoNumber); - if (deviceInfo == null) - { - deviceInfo = new DeviceInfo - { - //Name = newDevice.Name, - //Number = newDevice.InfoNumber - }; - deviceInfoRepo.Add(deviceInfo); - deviceInfoRepo.SaveChanges(); - } - } + //var newDevice = message.FromJson(); + //using (var scope = this._applicationService.CreateScope()) + //{ + // var deviceInfoRepo = scope.ServiceProvider.GetService>(); + // 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>(); + // 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>(); + // var device = deviceRepo.Table().FirstOrDefault(o => o.Number == newDevice.Number); + // if (device == null) + // { + // device = new Device + // { + // }; + // } + //} } public void ApiCallback(string message, string connectionId) @@ -101,5 +101,50 @@ namespace IoTCenter.Services this.ServerToClient(connectionId, "ApiCallback", message); } } + + private void UpdateApi(DeviceInfo deviceInfo) + { + try + { + var reader = new OpenApiStringReader(new OpenApiReaderSettings { }).Read(deviceInfo.ApiJson, out OpenApiDiagnostic diagnostic); + foreach (var path in reader.Paths) + { + foreach (var operation in path.Value.Operations) + { + if (!deviceInfo.Apis.Any(o => o.Name == operation.Value.Summary)) + { + 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() + }; + deviceInfo.Apis.Add(api); + 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() + }); + } + } + } + } + } + } + catch (Exception ex) + { + ex.PrintStack(); + } + } } } \ No newline at end of file