Program.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. namespace MinicsConsole;
  2. internal class Program
  3. {
  4. private readonly static ILog _expLog = new Logger.Logger();
  5. public static WebApplication? WebApplication { get; private set; }
  6. static void Main(string[] args)
  7. {
  8. Mutex mutex = new(true, "7E862400-8020-BE75-5266-B2C4BEB54076", out bool flag);
  9. if (!flag)
  10. return;
  11. _expLog.Initialize("Exceptions");
  12. AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
  13. TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
  14. if (!BaseConfigFileLoader.Load(out BasicInfo? basicInfo) || basicInfo is null)
  15. {
  16. MessageBox.Show("BaseInfo.xml Load Failed");
  17. return;
  18. }
  19. WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
  20. builder.Services.AddSignalR(
  21. options =>
  22. {
  23. options.EnableDetailedErrors = true;
  24. options.MaximumReceiveMessageSize = 262144;//256k
  25. //options.ClientTimeoutInterval = TimeSpan.FromSeconds(5);
  26. //options.KeepAliveInterval = TimeSpan.FromSeconds(10);
  27. //options.MaximumParallelInvocationsPerClient = 5;
  28. });
  29. //Host Service
  30. builder.Services.AddHostedService<HostLifetime>();
  31. //Connections
  32. builder.Services.AddSingleton<Mini8DataDispatcher>();
  33. builder.Services.AddSingleton<PLCNotifier>();
  34. builder.Services.AddSingleton<RTNotifier>();
  35. builder.Services.AddSingleton<UISender>();
  36. builder.Services.AddSingleton<KanbanNotifier>();
  37. builder.Services.AddSingleton<ILog, LogSender>();
  38. builder.Services.AddSingleton<ITlvProvider, RTProvider_TLV>();
  39. //Configs
  40. builder.Services.AddSingleton<BasicInfo>(basicInfo);
  41. builder.Services.AddSingleton<Hardwares>();
  42. builder.Services.AddSingleton<ConfigFiles>();
  43. builder.Services.AddSingleton<HardWareMonitor>();
  44. builder.Services.AddSingleton<HardwareAddress>();
  45. builder.Services.AddSingleton<ConfigFileLoader>();
  46. builder.Services.AddSingleton<AddressFileLoader>();
  47. builder.Services.AddSingleton<HardwareFileLoader>();
  48. //Function Helpers
  49. builder.Services.AddSingleton<ConfigUpdater>();
  50. builder.Services.AddSingleton<DataBaseSwitch>();
  51. builder.Services.AddSingleton<DataBaseCleaner>();
  52. builder.Services.AddSingleton<DailyRoutinHelper>();
  53. //DataBase
  54. builder.Services.AddSingleton<OrmCollections>();
  55. //Businesses
  56. builder.Services.AddSingleton<UserOperator>();
  57. builder.Services.AddSingleton<DatabaseOperator>();
  58. builder.Services.AddSingleton<HardwareOperator>();
  59. builder.Services.AddSingleton<ConfigFileOperator>();
  60. WebApplication = builder.Build();
  61. WebApplication.MapHub<UIHub>("/UIHub");
  62. WebApplication.MapHub<LogHub>("/LogHub");
  63. WebApplication.RunAsync($"http://{basicInfo.ServerAddress}:{basicInfo.ServerPort}").Wait();
  64. }
  65. private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  66. {
  67. string s = e.ExceptionObject!.ToString()!;
  68. MessageBox.Show(s);
  69. _expLog.Fatal(s);
  70. }
  71. private static void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
  72. {
  73. //_expLog.Fatal(e.Exception!.ToString()!);
  74. }
  75. }