public void RegisterSubmodelServiceProvider(string id, ISubmodelServiceProvider submodelServiceProvider)
 {
     if (!SubmodelServiceProviders.ContainsKey(id))
     {
         SubmodelServiceProviders.Add(id, submodelServiceProvider);
     }
 }
Exemple #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            AssetAdministrationShell aas = SimpleAssetAdministrationShell.GetAssetAdministrationShell();
            ISubmodel testSubmodel       = aas.Submodels["TestSubmodel"];

            ServerSettings submodelServerSettings = ServerSettings.CreateSettings();

            submodelServerSettings.ServerConfig.Hosting.ContentPath = "Content";
            submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5222");

            SubmodelHttpServer       submodelServer          = new SubmodelHttpServer(submodelServerSettings);
            ISubmodelServiceProvider submodelServiceProvider = testSubmodel.CreateServiceProvider();

            submodelServer.SetServiceProvider(submodelServiceProvider);
            submodelServiceProvider.UseAutoEndpointRegistration(submodelServerSettings.ServerConfig);
            Task runSubmodelTask = submodelServer.RunAsync();

            ServerSettings aasServerSettings = ServerSettings.CreateSettings();

            aasServerSettings.ServerConfig.Hosting.ContentPath = "Content";
            aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5111");

            IAssetAdministrationShellServiceProvider serviceProvider = aas.CreateServiceProvider(true);

            serviceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(testSubmodel.IdShort, submodelServiceProvider);
            serviceProvider.UseAutoEndpointRegistration(aasServerSettings.ServerConfig);

            AssetAdministrationShellHttpServer aasServer = new AssetAdministrationShellHttpServer(aasServerSettings);

            aasServer.SetServiceProvider(serviceProvider);
            aasServer.Run();
        }
Exemple #3
0
 public void SetServiceProvider(ISubmodelServiceProvider submodelServiceProvider)
 {
     WebHostBuilder.ConfigureServices(services =>
     {
         services.AddSingleton <ISubmodelServiceProvider>(submodelServiceProvider);
     });
 }
        public IResult <ISubmodel> RetrieveSubmodel(string submodelId)
        {
            ISubmodelServiceProvider serviceProvider = GetSubmodelServiceProvider(submodelId);

            if (serviceProvider != null && serviceProvider.GetBinding() != null)
            {
                ISubmodel binding = serviceProvider.GetBinding();
                return(new Result <ISubmodel>(true, binding));
            }
            return(new Result <ISubmodel>(false, new NotFoundMessage("Submodel Service Provider")));
        }
Exemple #5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddStandardImplementation();

            Assembly controllerAssembly = Assembly.Load(ControllerAssemblyName);

            services.AddCors();
            services.AddMvc()
            .AddApplicationPart(controllerAssembly)
            .AddControllersAsServices()
            .AddNewtonsoftJson(options => options.GetDefaultMvcJsonOptions(services));

            services.AddRazorPages(options =>
            {
                string pageName = ServerSettings.ServerConfig?.DefaultRoute ?? "/Index";
                options.Conventions.AddPageRoute(pageName, "");
            });

            //Check whether Submodel Service Provider exists and bind it to the Submodel-Services-Controller
            services.AddTransient(ctx =>
            {
                ISubmodelServiceProvider submodelServiceProvider = ctx
                                                                   .GetRequiredService <ISubmodelRepositoryServiceProvider>()
                                                                   .GetSubmodelServiceProvider(submodelId);

                return(new SubmodelServices(submodelServiceProvider));
            });

            // Register the Swagger generator, defining one or more Swagger documents
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "BaSyx Submodel Repository HTTP REST-API",
                    Description = "The full description of the generic BaSyx Submodel Repository HTTP REST-API",
                    Contact     = new OpenApiContact {
                        Name = "Constantin Ziesche", Email = "*****@*****.**", Url = new Uri("https://www.bosch.com/de/")
                    },
                    License = new OpenApiLicense {
                        Name = "EPL-2.0", Url = new Uri("https://www.eclipse.org/legal/epl-2.0/")
                    }
                });

                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{controllerAssembly.GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                if (ResourceChecker.CheckResourceAvailability(controllerAssembly, ControllerAssemblyName, xmlFile, true))
                {
                    c.IncludeXmlComments(xmlPath);
                }
            });
            services.AddSwaggerGenNewtonsoftSupport();
        }
Exemple #6
0
        public virtual IResult <ISubmodelDescriptor> RegisterSubmodelServiceProvider(string submodelId, ISubmodelServiceProvider submodelServiceProvider)
        {
            if (SubmodelServiceProviders.ContainsKey(submodelId))
            {
                SubmodelServiceProviders[submodelId] = submodelServiceProvider;
            }
            else
            {
                SubmodelServiceProviders.Add(submodelId, submodelServiceProvider);
            }

            return(new Result <ISubmodelDescriptor>(true, submodelServiceProvider.ServiceDescriptor));
        }
        public static void UseAutoEndpointRegistration(this ISubmodelServiceProvider serviceProvider, ServerConfiguration serverConfiguration)
        {
            string multiUrl = serverConfiguration.Hosting.Urls.Find(u => u.Contains("+"));

            if (!string.IsNullOrEmpty(multiUrl))
            {
                Uri uri = new Uri(multiUrl.Replace("+", "localhost"));
                List <IEndpoint> endpoints = GetNetworkInterfaceBasedEndpoints(uri.Scheme, uri.Port);
                serviceProvider.UseDefaultEndpointRegistration(endpoints);
            }
            else
            {
                List <IEndpoint> endpoints = serverConfiguration.Hosting.Urls.ConvertAll(EndpointConverter);
                serviceProvider.UseDefaultEndpointRegistration(endpoints);
            }
        }
        public static void UseDefaultEndpointRegistration(this ISubmodelServiceProvider serviceProvider, IEnumerable <IEndpoint> endpoints)
        {
            List <IEndpoint> submodelEndpoints = new List <IEndpoint>();

            foreach (var endpoint in endpoints)
            {
                string epAddress = endpoint.Address;
                if (!epAddress.EndsWith("/submodel"))
                {
                    epAddress = epAddress + (epAddress.EndsWith("/") ? "" : "/") + "submodel";
                }

                submodelEndpoints.Add(EndpointFactory.CreateEndpoint(endpoint.Type, epAddress, endpoint.Security));
            }

            serviceProvider.ServiceDescriptor.AddEndpoints(submodelEndpoints);
        }
        public IResult <ISubmodel> CreateSubmodel(ISubmodel submodel)
        {
            if (submodel == null)
            {
                return(new Result <ISubmodel>(new ArgumentNullException(nameof(submodel))));
            }
            RegisterSubmodelServiceProvider(submodel.IdShort, submodel.CreateServiceProvider());

            ISubmodelServiceProvider serviceProvider = GetSubmodelServiceProvider(submodel.IdShort);

            if (serviceProvider != null && serviceProvider.GetBinding() != null)
            {
                return(new Result <ISubmodel>(true, serviceProvider.GetBinding()));
            }
            else
            {
                return(new Result <ISubmodel>(false, new Message(MessageType.Error, "Could not retrieve Submodel Service Provider")));
            }
        }
Exemple #10
0
        private static void LoadSingleShell()
        {
            AssetAdministrationShell aas = SimpleAssetAdministrationShell.SimpleAssetAdministrationShell.GetAssetAdministrationShell();
            ISubmodel testSubmodel       = aas.Submodels["TestSubmodel"];

            ServerSettings submodelServerSettings = ServerSettings.CreateSettings();

            submodelServerSettings.ServerConfig.Hosting.ContentPath = "Content";
            submodelServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5222");

            SubmodelHttpServer       submodelServer          = new SubmodelHttpServer(submodelServerSettings);
            ISubmodelServiceProvider submodelServiceProvider = testSubmodel.CreateServiceProvider();

            submodelServer.SetServiceProvider(submodelServiceProvider);
            submodelServiceProvider.UseAutoEndpointRegistration(submodelServerSettings.ServerConfig);
            submodelServer.RunAsync();

            ServerSettings aasServerSettings = ServerSettings.CreateSettings();

            aasServerSettings.ServerConfig.Hosting.ContentPath = "Content";
            aasServerSettings.ServerConfig.Hosting.Urls.Add("http://localhost:5111");

            IAssetAdministrationShellServiceProvider aasServiceProvider = aas.CreateServiceProvider(true);

            aasServiceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(testSubmodel.IdShort, submodelServiceProvider);
            aasServiceProvider.UseAutoEndpointRegistration(aasServerSettings.ServerConfig);

            AssetAdministrationShellHttpServer aasServer = new AssetAdministrationShellHttpServer(aasServerSettings);

            aasServer.SetServiceProvider(aasServiceProvider);
            aasServer.ApplicationStopping = () => { registryClient.DeleteAssetAdministrationShell(aas.Identification.Id); };
            aasServer.RunAsync();

            registryClient.CreateAssetAdministrationShell(new AssetAdministrationShellDescriptor(aas, aasServiceProvider.ServiceDescriptor.Endpoints));
            registryClient.CreateSubmodel(aas.Identification.Id, new SubmodelDescriptor(testSubmodel, submodelServiceProvider.ServiceDescriptor.Endpoints));
        }
Exemple #11
0
 public SubmodelServices(ISubmodelServiceProvider submodelServiceProvider)
 {
     this.submodelServiceProvider = submodelServiceProvider;
     ServiceDescriptor            = submodelServiceProvider?.ServiceDescriptor;
 }
Exemple #12
0
 public IndexModel(ISubmodelServiceProvider provider)
 {
     ServiceProvider = provider;
 }
 public void RegisterSubmodelServiceProvider(string id, ISubmodelServiceProvider submodelServiceProvider)
 {
     repository.RegisterSubmodelServiceProvider(id, submodelServiceProvider);
 }
Exemple #14
0
 public void RegisterSubmodelServiceProvider(string id, ISubmodelServiceProvider submodelServiceProvider)
 {
     assetAdministrationShellServiceProvider.SubmodelRegistry.RegisterSubmodelServiceProvider(id, submodelServiceProvider);
 }
        public IResult <ISubmodelDescriptor> RegisterSubmodelServiceProvider(string id, ISubmodelServiceProvider submodelServiceProvider)
        {
            var request  = base.CreateJsonContentRequest(GetUri(SUBMODELS, id, BINDING), HttpMethod.Post, submodelServiceProvider.ServiceDescriptor);
            var response = base.SendRequest(request, REQUEST_TIMEOUT);

            return(base.EvaluateResponse <ISubmodelDescriptor>(response, response.Entity));
        }