88 lines
2.7 KiB
C#
88 lines
2.7 KiB
C#
using Bts.DataStreamCore.Services;
|
|
using Bts.PubSub.Services;
|
|
using Bts.SharedStreams.Services;
|
|
|
|
using Spark.Api.Services;
|
|
using Spark.Core.Services;
|
|
|
|
using System.Reactive.Linq;
|
|
using System.Reflection;
|
|
|
|
var builder = WebApplication.CreateBuilder(new WebApplicationOptions {
|
|
Args = args,
|
|
ApplicationName = "Bts.DataStreamWebApp.Server",
|
|
});
|
|
ConfigureApp(builder.Configuration, builder.Environment.EnvironmentName);
|
|
ConfigureServices(builder.Services, builder.Configuration);
|
|
|
|
var app = builder.Build();
|
|
var wsOpts = new WebSocketOptions {
|
|
KeepAliveInterval = TimeSpan.FromMinutes(2)
|
|
};
|
|
if (app.Environment.IsDevelopment()) {
|
|
app.UseDirectoryBrowser("/browse");
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
app.UseHttpsRedirection();
|
|
app.UseWebSockets(wsOpts);
|
|
app.UseDefaultFiles();
|
|
app.UseStaticFiles();
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
try {
|
|
Console.Write($"Starting Application");
|
|
app.Run();
|
|
Console.Write($"Application exited gracefully.");
|
|
} catch (Exception ex) {
|
|
Console.Error.Write($"Application crashed: {ex}");
|
|
return 1;
|
|
}
|
|
return 0;
|
|
|
|
static void ConfigureApp(ConfigurationManager configBuilder, string environment) {
|
|
// We prefix appsettings with the exe name because multiple exes will usually be in the build dir
|
|
// (this way, each exe can still load its own appsettings files from the current directory).
|
|
var exeName = Assembly.GetCallingAssembly().GetName().Name;
|
|
AddJsonFile($"{exeName}.appsettings.json");
|
|
AddJsonFile($"{exeName}.appsettings.{environment}.json");
|
|
|
|
var cfg = configBuilder.GetSection("config")?.Value;
|
|
if (!SetBasePath(cfg)) {
|
|
AddJsonFile(cfg);
|
|
}
|
|
|
|
bool SetBasePath(string? path) {
|
|
if (!Directory.Exists(path)) {
|
|
return false;
|
|
}
|
|
configBuilder.SetBasePath(path);
|
|
return true;
|
|
}
|
|
|
|
bool AddJsonFile(string? path) {
|
|
if (!File.Exists(path)) {
|
|
return false;
|
|
}
|
|
configBuilder.AddJsonFile(path);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
static void ConfigureServices(IServiceCollection services, IConfiguration config) {
|
|
services.AddDirectoryBrowser()
|
|
.AddControllers().Services
|
|
.AddEndpointsApiExplorer()
|
|
.AddSwaggerGen();
|
|
services.AddSpaStaticFiles();
|
|
services.AddSpark(config.GetSection("Spark"))
|
|
.AddSparkApi(config.GetSection("SparkApi"))
|
|
.AddMasterWorker(config.GetSection("MasterWorker"))
|
|
.AddViewStreamDatabase()
|
|
.AddPrimitiveDataStreamFactory(config.GetSection("PrimitiveStreams"))
|
|
.AddOhlcvStreams(config.GetSection("StreamDatabase"))
|
|
.AddNaturalLanguageStreams(config.GetSection("NaturalLanguageStream"))
|
|
.AddCompositeDataStreamFactory()
|
|
.AddPubSubClient(config.GetSection("PubSub"));
|
|
}
|