WebEngine.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Threading.Tasks;
  3. using Comal.Classes;
  4. using Comal.Stores;
  5. using InABox.IPC;
  6. using InABox.Clients;
  7. using InABox.Configuration;
  8. using InABox.Core;
  9. using InABox.Wpf.Reports;
  10. using InABox.Rpc;
  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. var transport = new RpcClientPipeTransport(DatabaseServerProperties.GetPipeName(Properties.Server));
  30. ClientFactory.SetClientType(typeof(RpcClient<>), Platform.WebEngine, Version, transport);
  31. Logger.Send(LogType.Information, "", "Registering Classes");
  32. StoreUtils.RegisterClasses();
  33. CoreUtils.RegisterClasses();
  34. ComalUtils.RegisterClasses();
  35. ReportUtils.RegisterClasses();
  36. ConfigurationUtils.RegisterClasses();
  37. while (!Client.Ping())
  38. {
  39. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  40. await Task.Delay(30_000);
  41. Logger.Send(LogType.Information, "", "Retrying connection...");
  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. }