using System; using System.Threading.Tasks; using Comal.Classes; using Comal.Stores; using InABox.IPC; using InABox.Clients; using InABox.Configuration; using InABox.Core; using InABox.Wpf.Reports; using InABox.Rpc; namespace PRSServer { public class WebEngine : Engine { private WebListener listener; public override void Configure(Server server) { base.Configure(server); Logger.Send(LogType.Information, "", "Configuring..."); } public override async 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)); ClientFactory.SetClientType(typeof(RpcClient<>), Platform.WebEngine, Version, transport); Logger.Send(LogType.Information, "", "Registering Classes"); StoreUtils.RegisterClasses(); CoreUtils.RegisterClasses(); ComalUtils.RegisterClasses(); ReportUtils.RegisterClasses(); ConfigurationUtils.RegisterClasses(); while (!Client.Ping()) { Logger.Send(LogType.Error, "", "Database server unavailable. Trying again in 30 seconds..."); await Task.Delay(30_000); Logger.Send(LogType.Information, "", "Retrying connection..."); } ClientFactory.SetBypass(); try { listener?.Stop(); listener = new WebListener(new WebHandlerProperties(Properties.MaxFileSize, (ulong)Properties.LoginExpiry * 3600)); listener.InitHTTPS((ushort)Properties.ListenPort, CertificateFileName()); Logger.Send(LogType.Information, "", "Starting Web Listener on port " + Properties.ListenPort); listener.Start(); } catch (Exception eListen) { Logger.Send(LogType.Error, ClientFactory.UserID, eListen.Message); } } public override void Stop() { Logger.Send(LogType.Information, "", "Stopping.."); listener?.Stop(); } private string CertificateFileName() => !string.IsNullOrWhiteSpace(Properties.CertificateFile) ? Properties.CertificateFile : CertificateEngine.CertificateFile; } }