Program.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. //_expLog.Fatal(e.Exception!.ToString()!);
  75. }
  76. }