LicensingEngine.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Comal.Classes;
  2. using Comal.Stores;
  3. using InABox.Clients;
  4. using InABox.Configuration;
  5. using InABox.Core;
  6. using InABox.Rpc;
  7. using InABox.Wpf.Reports;
  8. using PRS.Shared;
  9. using PRSServer;
  10. using PRSServices;
  11. using System;
  12. using System.Threading;
  13. using System.Threading.Tasks;
  14. namespace PRSLicensing;
  15. public class LicensingEngine : Engine<LicensingEngineProperties>
  16. {
  17. private Listener<LicensingHandler, LicensingHandlerProperties> listener;
  18. public override void Run()
  19. {
  20. Logger.Send(LogType.Information, "", "Starting..");
  21. if (string.IsNullOrWhiteSpace(Properties.Server))
  22. {
  23. Logger.Send(LogType.Error, "", "Server is blank!");
  24. return;
  25. }
  26. var transport = new RpcClientPipeTransport(DatabaseServerProperties.GetPipeName(Properties.Server, true));
  27. ClientFactory.SetClientType(typeof(RpcClient<>), Platform.LicensingEngine, Version, transport);
  28. CheckConnection();
  29. Logger.Send(LogType.Information, "", "Registering Classes");
  30. StoreUtils.RegisterClasses();
  31. CoreUtils.RegisterClasses();
  32. ComalUtils.RegisterClasses();
  33. PRSSharedUtils.RegisterClasses();
  34. ReportUtils.RegisterClasses();
  35. ConfigurationUtils.RegisterClasses();
  36. Logger.Send(LogType.Information, "", "Starting Listener on port " + Properties.ListenPort);
  37. try
  38. {
  39. listener = new Listener<LicensingHandler, LicensingHandlerProperties>(new LicensingHandlerProperties(Properties));
  40. listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName());
  41. listener.Start();
  42. }
  43. catch (Exception eListen)
  44. {
  45. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  46. }
  47. }
  48. private string CertificateFileName() => Properties.CertificateFile;
  49. private void CheckConnection()
  50. {
  51. // Wait for server connection
  52. while (!Client.Ping())
  53. {
  54. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  55. Task.Delay(30_000).Wait();
  56. Logger.Send(LogType.Information, "", "Retrying connection...");
  57. }
  58. ClientFactory.SetBypass();
  59. }
  60. public override void Stop()
  61. {
  62. Logger.Send(LogType.Information, "", "Stopping");
  63. listener?.Stop();
  64. }
  65. }