Пример #1
0
        public async Task <DetailResponse <DeviceType> > GetDeviceType(String id)
        {
            var deviceType = await _deviceTypeManager.GetDeviceTypeAsync(id, OrgEntityHeader, UserEntityHeader);

            return(DetailResponse <DeviceType> .Create(deviceType));
        }
        public async Task <InvokeResult> PopulateDeviceConfigToDeviceAsync(Device device, EntityHeader instanceEH, EntityHeader org, EntityHeader user)
        {
            var result = new InvokeResult();

            device.DeviceType.Value = await _deviceTypeManager.GetDeviceTypeAsync(device.DeviceType.Id, org, user);

            var deviceConfig = await GetDeviceConfigurationAsync(device.DeviceConfiguration.Id, org, user);

            if (deviceConfig == null)
            {
                result.AddSystemError($"Could Not Load Device Configuration with Device Configuration {device.DeviceConfiguration.Text}, Id={device.DeviceConfiguration.Id}.");
                return(result);
            }

            device.DeviceLabel     = deviceConfig.DeviceLabel;
            device.DeviceIdLabel   = deviceConfig.DeviceIdLabel;
            device.DeviceNameLabel = deviceConfig.DeviceNameLabel;
            device.DeviceTypeLabel = deviceConfig.DeviceTypeLabel;

            if (deviceConfig.Properties != null)
            {
                device.PropertiesMetaData = new List <DeviceAdmin.Models.CustomField>();
                foreach (var prop in deviceConfig.Properties.OrderBy(prop => prop.Order))
                {
                    device.PropertiesMetaData.Add(prop);
                    if (prop.FieldType.Value == DeviceAdmin.Models.ParameterTypes.State)
                    {
                        prop.StateSet.Value = await _deviceAdminManager.GetStateSetAsync(prop.StateSet.Id, org, user);
                    }
                    else if (prop.FieldType.Value == DeviceAdmin.Models.ParameterTypes.ValueWithUnit)
                    {
                        prop.UnitSet.Value = await _deviceAdminManager.GetAttributeUnitSetAsync(prop.UnitSet.Id, org, user);
                    }
                }
            }

            if (EntityHeader.IsNullOrEmpty(instanceEH))
            {
                result.AddSystemError($"Device does not have a valid device configuration Device Id={device.Id}");
                return(result);
            }


            var instance = await _deploymentInstanceManager.GetInstanceAsync(instanceEH.Id, org, user);

            if (instance != null && instance.Status.Value == DeploymentInstanceStates.Running)
            {
                if (instance.InputCommandSSL)
                {
                    device.DeviceURI = $"https://{instance.DnsHostName}:{instance.InputCommandPort}/devices/{device.Id}";
                }
                else
                {
                    device.DeviceURI = $"http://{instance.DnsHostName}:{instance.InputCommandPort}/devices/{device.Id}";
                }

                var workflowKeys = new List <string>();

                var endpoints = new List <InputCommandEndPoint>();
                foreach (var route in deviceConfig.Routes)
                {
                    foreach (var module in route.PipelineModules)
                    {
                        if (module.ModuleType.Value == Pipeline.Admin.Models.PipelineModuleType.Workflow)
                        {
                            var wfLoadResult = await _deviceAdminManager.LoadFullDeviceWorkflowAsync(module.Module.Id, org, user);

                            if (wfLoadResult.Successful && !workflowKeys.Contains(wfLoadResult.Result.Key))
                            {
                                workflowKeys.Add(wfLoadResult.Result.Key);
                                if (wfLoadResult.Result.Attributes != null)
                                {
                                    foreach (var attribute in wfLoadResult.Result.Attributes)
                                    {
                                        if (device.AttributeMetaData == null)
                                        {
                                            device.AttributeMetaData = new List <DeviceAdmin.Models.Attribute>();
                                        }

                                        if (!device.AttributeMetaData.Where(attr => attr.Key == attribute.Key).Any())
                                        {
                                            device.AttributeMetaData.Add(attribute);
                                        }
                                    }
                                }

                                if (wfLoadResult.Result.StateMachines != null)
                                {
                                    if (device.StateMachineMetaData == null)
                                    {
                                        device.StateMachineMetaData = new List <StateMachine>();
                                    }

                                    foreach (var stateMachine in wfLoadResult.Result.StateMachines)
                                    {
                                        if (!device.StateMachineMetaData.Where(attr => attr.Key == stateMachine.Key).Any())
                                        {
                                            device.StateMachineMetaData.Add(stateMachine);
                                        }
                                    }
                                }

                                if (wfLoadResult.Result.InputCommands != null)
                                {
                                    foreach (var inputCommand in wfLoadResult.Result.InputCommands)
                                    {
                                        var protocol = instance.InputCommandSSL ? "https://" : "http://";
                                        var endPoint = new InputCommandEndPoint
                                        {
                                            EndPoint     = $"{protocol}{instance.DnsHostName}:{instance.InputCommandPort}/{deviceConfig.Key}/{route.Key}/{wfLoadResult.Result.Key}/{inputCommand.Key}/{device.DeviceId}",
                                            InputCommand = inputCommand
                                        };

                                        foreach (var param in inputCommand.Parameters)
                                        {
                                            if (param.ParameterType.Value == ParameterTypes.State)
                                            {
                                                param.StateSet.Value = await _deviceAdminManager.GetStateSetAsync(param.StateSet.Id, org, user);
                                            }
                                            else if (param.ParameterType.Value == ParameterTypes.ValueWithUnit)
                                            {
                                                param.UnitSet.Value = await _deviceAdminManager.GetAttributeUnitSetAsync(param.UnitSet.Id, org, user);
                                            }
                                        }

                                        if (!endpoints.Where(end => end.EndPoint == endPoint.EndPoint).Any())
                                        {
                                            endpoints.Add(endPoint);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                result.Concat(result);
                            }
                        }
                    }
                }
                device.InputCommandEndPoints = endpoints;
            }
            else
            {
                device.InputCommandEndPoints = new List <InputCommandEndPoint>();
                device.AttributeMetaData     = new List <DeviceAdmin.Models.Attribute>();
                device.StateMachineMetaData  = new List <StateMachine>();
            }


            return(result);
        }