LicensingEngine.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. Logger.Send(LogType.Information, "", "Starting Web Listener on port " + Properties.ListenPort);
  42. listener.Start();
  43. }
  44. catch (Exception eListen)
  45. {
  46. Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message);
  47. }
  48. }
  49. private string CertificateFileName() => Properties.CertificateFile;
  50. private void CheckConnection()
  51. {
  52. // Wait for server connection
  53. while (!Client.Ping())
  54. {
  55. Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds...");
  56. Task.Delay(30_000).Wait();
  57. Logger.Send(LogType.Information, "", "Retrying connection...");
  58. }
  59. ClientFactory.SetBypass();
  60. }
  61. public override void Stop()
  62. {
  63. Logger.Send(LogType.Information, "", "Stopping");
  64. listener?.Stop();
  65. }
  66. }