WebEngine.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using Comal.Classes;
  5. using Comal.Stores;
  6. using InABox.Client.IPC;
  7. using InABox.Clients;
  8. using InABox.Configuration;
  9. using InABox.Core;
  10. using InABox.Reports;
  11. namespace PRSServer
  12. {
  13. public class WebEngine : Engine<WebServerProperties>
  14. {
  15. private WebListener listener;
  16. public override void Configure(Server server)
  17. {
  18. base.Configure(server);
  19. Logger.Send(LogType.Information, "", "Configuring...");
  20. }
  21. public override async void Run()
  22. {
  23. Logger.Send(LogType.Information, "", "Starting..");
  24. if (string.IsNullOrWhiteSpace(Properties.Server))
  25. {
  26. Logger.Send(LogType.Error, "", "Server is blank!");
  27. return;
  28. }
  29. ClientFactory.SetClientType(typeof(PipeIPCClient<>), "WebEngine", Version, DatabaseServerProperties.GetPipeName(Properties.Server));
  30. Logger.Send(LogType.Information, "", "Registering Classes");
  31. StoreUtils.RegisterClasses();
  32. CoreUtils.RegisterClasses();
  33. ComalUtils.RegisterClasses();
  34. ReportUtils.RegisterClasses();
  35. ConfigurationUtils.RegisterClasses();
  36. while (!Client.Ping())
  37. {
  38. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  39. await Task.Delay(30_000);
  40. Logger.Send(LogType.Information, "", "Retrying connection...");
  41. URLCache.Clear();
  42. }
  43. ClientFactory.SetBypass();
  44. try
  45. {
  46. listener?.Stop();
  47. listener = new WebListener(new WebHandlerProperties(Properties.MaxFileSize, (ulong)Properties.LoginExpiry * 3600));
  48. listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName());
  49. Logger.Send(LogType.Information, "", "Starting Web Listener on port " + Properties.ListenPort);
  50. listener.Start();
  51. }
  52. catch (Exception eListen)
  53. {
  54. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  55. }
  56. }
  57. public override void Stop()
  58. {
  59. Logger.Send(LogType.Information, "", "Stopping..");
  60. listener?.Stop();
  61. }
  62. private string CertificateFileName() =>
  63. !string.IsNullOrWhiteSpace(Properties.CertificateFile)
  64. ? Properties.CertificateFile
  65. : CertificateEngine.CertificateFile;
  66. }
  67. }