WebEngine.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. //ClientFactory.SetClientType(typeof(IPCClient<>), Platform.WebEngine, Version, DatabaseServerProperties.GetPipeName(Properties.Server, false));
  30. var transport = new RpcClientPipeTransport(DatabaseServerProperties.GetPipeName(Properties.Server, true));
  31. ClientFactory.SetClientType(typeof(RpcClient<>), Platform.WebEngine, Version, transport);
  32. CheckConnection();
  33. Logger.Send(LogType.Information, "", "Registering Classes");
  34. StoreUtils.RegisterClasses();
  35. CoreUtils.RegisterClasses();
  36. ComalUtils.RegisterClasses();
  37. ReportUtils.RegisterClasses();
  38. ConfigurationUtils.RegisterClasses();
  39. try
  40. {
  41. listener?.Stop();
  42. listener = new WebListener(new WebHandlerProperties(Properties.MaxFileSize, (ulong)Properties.LoginExpiry * 3600));
  43. listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName());
  44. Logger.Send(LogType.Information, "", "Starting Web Listener on port " + Properties.ListenPort);
  45. listener.Start();
  46. }
  47. catch (Exception eListen)
  48. {
  49. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  50. }
  51. }
  52. private void CheckConnection()
  53. {
  54. // Wait for server connection
  55. while (!Client.Ping())
  56. {
  57. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  58. Task.Delay(30_000).Wait();
  59. Logger.Send(LogType.Information, "", "Retrying connection...");
  60. }
  61. ClientFactory.SetBypass();
  62. }
  63. public override void Stop()
  64. {
  65. Logger.Send(LogType.Information, "", "Stopping..");
  66. listener?.Stop();
  67. }
  68. private string CertificateFileName() =>
  69. !string.IsNullOrWhiteSpace(Properties.CertificateFile)
  70. ? Properties.CertificateFile
  71. : CertificateEngine.CertificateFile;
  72. }
  73. }