/* * OCPP.Core - https://github.com/dallmann-consulting/OCPP.Core * Copyright (C) 2020-2021 dallmann consulting GmbH. * All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Net.WebSockets; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using OCPP.Core.Database; namespace OCPP.Core.Server { public class Startup { /// /// ILogger object /// private ILoggerFactory LoggerFactory { get; set; } public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddOCPPDbContext(Configuration); services.AddControllers(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. //public void Configure(IApplicationBuilder app, IWebHostEnvironment env) public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, IServiceScopeFactory serviceScopeFactory) { LoggerFactory = loggerFactory; ILogger logger = loggerFactory.CreateLogger(typeof(Startup)); logger.LogTrace("Startup => Configure(...)"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // Migrate database using var scope = serviceScopeFactory.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService(); // but only when not disabled (needs admin permissions in SQL-Server!) bool dbMigrate = Configuration.GetValue("AutoMigrateDB", true); if (dbMigrate) { dbContext.Database.Migrate(); } // Set WebSocketsOptions var webSocketOptions = new WebSocketOptions() { }; // Accept WebSocket app.UseWebSockets(webSocketOptions); // Integrate custom OCPP middleware for message processing app.UseOCPPMiddleware(); } } }