public IResult <IAssetAdministrationShellDescriptor> CreateAssetAdministrationShell(IAssetAdministrationShellDescriptor aas)
 {
     return(aasRegistryImpl.CreateAssetAdministrationShell(aas));
 }
Exemple #2
0
        private static async void DiscoveryServer_ServiceInstanceDiscovered(object sender, ServiceInstanceEventArgs e)
        {
            try
            {
                IAssetAdministrationShellDescriptor aasDescriptor = null;
                foreach (var server in e.Servers)
                {
                    bool pingable = await BaSyx.Utils.Network.NetworkUtils.PingHostAsync(server.Address.ToString());

                    if (pingable)
                    {
                        string uri = string.Empty;
                        if (server.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            uri = "http://" + server.Address.ToString() + ":" + server.Port + "/aas";
                        }
                        else if (server.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                        {
                            uri = "http://[" + server.Address.ToString() + "]:" + server.Port + "/aas";
                        }
                        else
                        {
                            continue;
                        }

                        Uri aasEndpoint = new Uri(uri);
                        AssetAdministrationShellHttpClient            client             = new AssetAdministrationShellHttpClient(aasEndpoint);
                        IResult <IAssetAdministrationShellDescriptor> retrieveDescriptor = client.RetrieveAssetAdministrationShellDescriptor();
                        if (retrieveDescriptor.Success && retrieveDescriptor.Entity != null)
                        {
                            retrieveDescriptor.LogResult(logger, LogLevel.Info, "Successfully retrieved AAS descriptor");
                            if (aasDescriptor == null)
                            {
                                aasDescriptor = retrieveDescriptor.Entity;
                                aasDescriptor.SetEndpoints(new List <IEndpoint>()
                                {
                                    new HttpEndpoint(uri)
                                });

                                foreach (var submodelDescriptor in retrieveDescriptor.Entity.SubmodelDescriptors)
                                {
                                    List <IEndpoint> submodelEndpoints = new List <IEndpoint>();
                                    foreach (var submodelEndpoint in submodelDescriptor.Endpoints)
                                    {
                                        if (submodelEndpoint.Address.Contains(server.Address.ToString()))
                                        {
                                            submodelEndpoints.Add(submodelEndpoint);
                                        }
                                    }
                                    aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].SetEndpoints(submodelEndpoints);
                                }
                            }
                            else
                            {
                                aasDescriptor.AddEndpoints(new List <IEndpoint>()
                                {
                                    new HttpEndpoint(uri)
                                });

                                foreach (var submodelDescriptor in retrieveDescriptor.Entity.SubmodelDescriptors)
                                {
                                    List <IEndpoint> submodelEndpoints = new List <IEndpoint>();
                                    foreach (var submodelEndpoint in submodelDescriptor.Endpoints)
                                    {
                                        if (submodelEndpoint.Address.Contains(server.Address.ToString()))
                                        {
                                            if (aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].Endpoints.FirstOrDefault(f => f.Address == submodelEndpoint.Address) == null)
                                            {
                                                submodelEndpoints.Add(submodelEndpoint);
                                            }
                                        }
                                    }
                                    aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].AddEndpoints(submodelEndpoints);
                                }
                            }
                        }
                        else
                        {
                            retrieveDescriptor.LogResult(logger, LogLevel.Info, "Could not retrieve AAS descriptor");
                        }
                    }
                }
                if (aasDescriptor != null)
                {
                    var registeredResult = assetAdministrationShellRegistry.CreateAssetAdministrationShell(aasDescriptor);
                    if (registeredResult.Success)
                    {
                        registeredResult.LogResult(logger, LogLevel.Info, "Successfully registered AAS at registry");
                    }
                    else
                    {
                        registeredResult.LogResult(logger, LogLevel.Error, "Could not register AAS at registry");
                    }
                }
            }
            catch (Exception exc)
            {
                logger.Error(exc, "Error accessing discovered service instance");
            }
        }