123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- using CompServ.Worker;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Server.Kestrel.Core;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Logging.Console;
- using System;
- using CompServ.ClientLibrary;
- using Microsoft.AspNetCore.Hosting.Server.Features;
- using Microsoft.AspNetCore.Hosting.Server;
- using Microsoft.AspNetCore.Http.Features;
- using System.Net;
- if (args.Length > 0)
- {
- StatusHolder.HubServer = args[0];
- if (args.Length > 1 && int.TryParse(args[1], out var ratioArg) && ratioArg > 1) StatusHolder.Ratio = ratioArg;
- }
- var builder = WebApplication.CreateBuilder(args);
- builder.Services.AddLogging(opt =>
- {
- opt.AddSimpleConsole(p =>
- {
- p.TimestampFormat = "[dd HH:mm:ss] ";
- p.SingleLine = true;
- p.ColorBehavior = LoggerColorBehavior.Enabled;
- });
- });
- builder.Services.Configure<LoggerFilterOptions>(options =>
- {
- options.AddFilter((category, level) =>
- {
- if (level == LogLevel.Debug) return false;
- if (level == LogLevel.Trace) return false;
- if (category == "Microsoft.AspNetCore.Hosting.Diagnostics" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Routing.EndpointMiddleware" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Server.Kestrel" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Server.Kestrel.Http2" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.ContentResultExecutor" && level == LogLevel.Information) return false;
- if (category == "Microsoft.AspNetCore.Mvc.Infrastructure.FileStreamResultExecutor" && level == LogLevel.Information) return false;
- return true;
- });
- });
- builder.WebHost.UseKestrel((_, kso) =>
- {
- kso.Listen(new IPEndPoint(IPAddress.Any, 0), lo => lo.Protocols = HttpProtocols.Http2);
- kso.Listen(new IPEndPoint(IPAddress.Any, 0), lo => lo.Protocols = HttpProtocols.Http1);
- });
- builder.Services.Configure<KestrelServerOptions>(options =>
- {
- options.Limits.MaxRequestBodySize = 100 * 1024 * 1024;
- });
- try
- {
- Console.Title = "...";
- builder.Services.AddHostedService<ConsoleTitleUpdateService>();
- }
- catch
- {
-
- }
- if (StatusHolder.HubServer != null) builder.Services.AddSingleton<HubRegister>();
- builder.Services.AddControllers();
- var app = builder.Build();
- app.Use(async (context, next) =>
- {
- context.Request.EnableBuffering();
- await next(context);
- });
- app.MapControllers();
- app.MapGet("/", () => "I am worker!");
- await app.StartAsync();
- {
- var logger = app.Services.GetRequiredService<ILogger<Program>>();
- logger.LogInformation("Self check...");
- var svr = app.Services.GetRequiredService<IServer>();
- var saf = svr.Features.GetRequiredFeature<IServerAddressesFeature>();
- var listeningPort = new Uri(saf.Addresses.First()).Port;
-
- tryAgain:
- var client = new CompServWorkerClient("http://127.0.0.1:" + listeningPort);
- var r = await client.CheckAliveAsync();
- if (r == false)
- {
- logger.LogWarning("Self check resunt: " + r + ", try again after 1 second");
- await Task.Delay(1000);
- goto tryAgain;
- }
- logger.LogInformation("Self check resunt: " + r);
- }
- var hubRegister = app.Services.GetService<HubRegister>();
- await (hubRegister?.Register() ?? Task.CompletedTask);
- await app.WaitForShutdownAsync();
- await (hubRegister?.UnRegister() ?? Task.CompletedTask);
|