WebEngine.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. using PRS.Shared;
  12. namespace PRSServer
  13. {
  14. public class WebEngine : Engine<WebServerProperties>
  15. {
  16. private WebListener listener;
  17. public override void Configure(Server server)
  18. {
  19. base.Configure(server);
  20. Logger.Send(LogType.Information, "", "Configuring...");
  21. }
  22. public override async void Run()
  23. {
  24. Logger.Send(LogType.Information, "", "Starting..");
  25. if (string.IsNullOrWhiteSpace(Properties.Server))
  26. {
  27. Logger.Send(LogType.Error, "", "Server is blank!");
  28. return;
  29. }
  30. //ClientFactory.SetClientType(typeof(IPCClient<>), Platform.WebEngine, Version, DatabaseServerProperties.GetPipeName(Properties.Server, false));
  31. var transport = new RpcClientPipeTransport(DatabaseServerProperties.GetPipeName(Properties.Server, true));
  32. ClientFactory.SetClientType(typeof(RpcClient<>), Platform.WebEngine, Version, transport);
  33. CheckConnection();
  34. Logger.Send(LogType.Information, "", "Registering Classes");
  35. StoreUtils.RegisterClasses();
  36. CoreUtils.RegisterClasses();
  37. ComalUtils.RegisterClasses();
  38. PRSSharedUtils.RegisterClasses();
  39. ReportUtils.RegisterClasses();
  40. ConfigurationUtils.RegisterClasses();
  41. try
  42. {
  43. listener?.Stop();
  44. listener = new WebListener(new WebHandlerProperties(Properties.MaxFileSize, (ulong)Properties.LoginExpiry * 3600));
  45. listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName());
  46. Logger.Send(LogType.Information, "", "Starting Web Listener on port " + Properties.ListenPort);
  47. listener.Start();
  48. }
  49. catch (Exception eListen)
  50. {
  51. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  52. }
  53. }
  54. private void CheckConnection()
  55. {
  56. // Wait for server connection
  57. while (!Client.Ping())
  58. {
  59. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  60. Task.Delay(30_000).Wait();
  61. Logger.Send(LogType.Information, "", "Retrying connection...");
  62. }
  63. ClientFactory.SetBypass();
  64. }
  65. public override void Stop()
  66. {
  67. Logger.Send(LogType.Information, "", "Stopping..");
  68. listener?.Stop();
  69. }
  70. private string CertificateFileName() =>
  71. !string.IsNullOrWhiteSpace(Properties.CertificateFile)
  72. ? Properties.CertificateFile
  73. : CertificateEngine.CertificateFile;
  74. }
  75. }