コード例 #1
0
ファイル: Program.cs プロジェクト: i-Asset/basyx
        public static void LoadMultipleSubmodels()
        {
            ServerSettings submodelRepositorySettings = ServerSettings.CreateSettings();

            submodelRepositorySettings.ServerConfig.Hosting.ContentPath = "Content";
            submodelRepositorySettings.ServerConfig.Hosting.Urls.Add("http://+:6999");

            MultiSubmodelHttpServer           multiServer       = new MultiSubmodelHttpServer(submodelRepositorySettings);
            SubmodelRepositoryServiceProvider repositoryService = new SubmodelRepositoryServiceProvider();

            for (int i = 0; i < 3; i++)
            {
                Submodel submodel = new Submodel()
                {
                    IdShort        = "MultiSubmodel_" + i,
                    Identification = new Identifier("http://basys40.de/submodel/MultiSubmodel/" + Guid.NewGuid().ToString(), KeyType.IRI),
                    Description    = new LangStringSet()
                    {
                        new LangString("de-DE", i + ". Teilmodell"),
                        new LangString("en-US", i + ". Submodel")
                    },
                    Administration = new AdministrativeInformation()
                    {
                        Version  = "1.0",
                        Revision = "120"
                    },
                    SubmodelElements = new ElementContainer <ISubmodelElement>()
                    {
                        new Property <string>()
                        {
                            IdShort = "Property_" + i,
                            Value   = "TestValue_" + i
                        },
                        new SubmodelElementCollection()
                        {
                            IdShort = "Coll_" + i,
                            Value   = new ElementContainer <ISubmodelElement>()
                            {
                                new Property <string>()
                                {
                                    IdShort = "SubProperty_" + i,
                                    Value   = "TestSubValue_" + i
                                }
                            }
                        }
                    }
                };

                var submodelServiceProvider = submodel.CreateServiceProvider();
                repositoryService.RegisterSubmodelServiceProvider(submodel.IdShort, submodelServiceProvider);
            }

            List <HttpEndpoint> endpoints = multiServer.Settings.ServerConfig.Hosting.Urls.ConvertAll(c => new HttpEndpoint(c.Replace("+", "127.0.0.1")));

            repositoryService.UseDefaultEndpointRegistration(endpoints);

            multiServer.SetServiceProvider(repositoryService);
            multiServer.ApplicationStopping = () =>
            {
                for (int i = 0; i < repositoryService.ServiceDescriptor.SubmodelDescriptors.Count; i++)
                {
                    registryClient.DeleteSubmodel("http://basyx.de/shells/MultiAAS/" + i, repositoryService.ServiceDescriptor.SubmodelDescriptors[i].IdShort);
                }
            };

            multiServer.RunAsync();

            var shells = registryClient.RetrieveAssetAdministrationShells();
            var shell  = shells.Entity?.FirstOrDefault(f => f.Identification.Id.Contains("SimpleAAS"));

            for (int i = 0; i < repositoryService.ServiceDescriptor.SubmodelDescriptors.Count; i++)
            {
                registryClient.CreateSubmodel("http://basyx.de/shells/MultiAAS/" + i, repositoryService.ServiceDescriptor.SubmodelDescriptors[i]);

                if (shell != null)
                {
                    registryClient.CreateSubmodel(shell.Identification.Id, repositoryService.ServiceDescriptor.SubmodelDescriptors[i]);
                }
            }
        }