public IResult <IAssetAdministrationShellDescriptor> CreateAssetAdministrationShell(IAssetAdministrationShellDescriptor aas) { return(aasRegistryImpl.CreateAssetAdministrationShell(aas)); }
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"); } }