Program.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. builder.Services.AddSingleton<HardwareDBLoader>();
  56. //Businesses
  57. builder.Services.AddSingleton<UserOperator>();
  58. builder.Services.AddSingleton<DatabaseOperator>();
  59. builder.Services.AddSingleton<HardwareOperator>();
  60. builder.Services.AddSingleton<ConfigFileOperator>();
  61. WebApplication = builder.Build();
  62. WebApplication.MapHub<UIHub>("/UIHub");
  63. WebApplication.MapHub<LogHub>("/LogHub");
  64. WebApplication.RunAsync($"http://{basicInfo.ServerAddress}:{basicInfo.ServerPort}").Wait();
  65. }
  66. private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
  67. {
  68. string s = e.ExceptionObject!.ToString()!;
  69. MessageBox.Show(s);
  70. _expLog.Fatal(s);
  71. }
  72. private static void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
  73. {
  74. try
  75. {
  76. var s = e.Exception is null ? "Unknow" : e.Exception.ToString();
  77. _expLog.Error(s);
  78. }
  79. catch
  80. {
  81. }
  82. }
  83. }