using Comal.Classes; using Comal.Stores; using InABox.Clients; using InABox.Configuration; using InABox.Core; using InABox.Rpc; using InABox.Wpf.Reports; using PRS.Shared; using PRSServer; using PRSServices; using System; using System.Threading; using System.Threading.Tasks; namespace PRSLicensing; public class LicensingEngine : Engine { private Listener listener; public override void Run() { Logger.Send(LogType.Information, "", "Starting.."); if (string.IsNullOrWhiteSpace(Properties.Server)) { Logger.Send(LogType.Error, "", "Server is blank!"); return; } var transport = new RpcClientPipeTransport(DatabaseServerProperties.GetPipeName(Properties.Server, true)); ClientFactory.SetClientType(typeof(RpcClient<>), Platform.LicensingEngine, Version, transport); CheckConnection(); Logger.Send(LogType.Information, "", "Registering Classes"); StoreUtils.RegisterClasses(); CoreUtils.RegisterClasses(); ComalUtils.RegisterClasses(); PRSSharedUtils.RegisterClasses(); ReportUtils.RegisterClasses(); ConfigurationUtils.RegisterClasses(); Logger.Send(LogType.Information, "", "Starting Listener on port " + Properties.ListenPort); try { listener = new Listener(new LicensingHandlerProperties(Properties)); listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName()); listener.Start(); } catch (Exception eListen) { Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message); } } private string CertificateFileName() => Properties.CertificateFile; private void CheckConnection() { // Wait for server connection while (!Client.Ping()) { Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds..."); Task.Delay(30_000).Wait(); Logger.Send(LogType.Information, "", "Retrying connection..."); } ClientFactory.SetBypass(); } public override void Stop() { Logger.Send(LogType.Information, "", "Stopping"); listener?.Stop(); } }