diff --git a/Program.cs b/Program.cs index 5591ee9..99019c8 100644 --- a/Program.cs +++ b/Program.cs @@ -1,17 +1,19 @@ global using System.Diagnostics; global using System.Text.Json; + + // Prevent from ending if CTL+C is pressed. Console.TreatControlCAsInput = true; Console.WriteLine($"AyaNova server launcher {AyaNovaVersion.VersionString}"); - -//Locate the ayanova executable folder as the basis point for all other paths later +//Locate the ayanova executable folder as the basis point var AyaNovaProgramFolder = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "..")); #if(DEBUG) AyaNovaProgramFolder = @"c:\Program Files\ayanova\"; #endif + //read in the config.json file to get it's current values var ConfigFile = Path.Combine(AyaNovaProgramFolder, "config.json"); if (!File.Exists(ConfigFile)) @@ -45,77 +47,80 @@ catch (Exception ex) return; } -// Console.WriteLine($"DataPath resolved to: {DataPath}"); -// Console.WriteLine($"AyaNovaProgramFolder resolved to: {AyaNovaProgramFolder}"); - - //================== LAUNCH POSTGRES SERVER ================== //https://notepad.onghu.com/2021/portable-postgresql-on-windows-without-installation/ - -ProcessStartInfo PGStartInfo = new ProcessStartInfo(Path.Combine(AyaNovaProgramFolder, "local-postgres", "bin","pg_ctl.exe")); +//ARGUMENTS DOC: https://www.postgresql.org/docs/11/app-postgres.html +var PGProcess = new Process(); +ProcessStartInfo PGStartInfo = new ProcessStartInfo(Path.Combine(AyaNovaProgramFolder, "local-postgres", "bin", "pg_ctl.exe")); PGStartInfo.EnvironmentVariables["PGDATA"] = Path.Combine(DataPath, "database"); -//PGStartInfo.EnvironmentVariables["PGDATABASE"] = "AyaNova"; PGStartInfo.EnvironmentVariables["PGUSER"] = "postgres"; PGStartInfo.EnvironmentVariables["PGPORT"] = "5432"; PGStartInfo.EnvironmentVariables["PGLOCALEDIR"] = Path.Combine(AyaNovaProgramFolder, "local-postgres", "share", "locale"); -PGStartInfo.EnvironmentVariables["PGLOGS "] = Path.Combine(DataPath, "logs"); - -//ARGUMENTS DOC: https://www.postgresql.org/docs/11/app-postgres.html -//PGStartInfo.Arguments = $"-D {Path.Combine(DataPath, "database")} -o \"-p 5432\" -l {Path.Combine(DataPath, "logs","postgres.log")} start"; +PGStartInfo.EnvironmentVariables["PGLOGS "] = Path.Combine(DataPath, "logs","postgres.log"); PGStartInfo.Arguments = "start"; -//PGStartInfo.FileName = "pg_ctl_test.exe"; -//PGStartInfo.WorkingDirectory = Path.Combine(DataPath, "database"); PGStartInfo.WorkingDirectory = Path.Combine(AyaNovaProgramFolder, "local-postgres", "bin"); - PGStartInfo.UseShellExecute = false; +//PGStartInfo.RedirectStandardOutput = true; +PGProcess.StartInfo = PGStartInfo; +//PGProcess.OutputDataReceived += new DataReceivedEventHandler(PostgresOutputHandler); +PGProcess.Start(); -//Console.WriteLine($"PGStartInfo environment: {string.Join(",",PGStartInfo.EnvironmentVariables.Values.GetEnumerator())}"); - -var PGProcess = Process.Start(PGStartInfo); - -/*"-D C:\ProgramData\ayanova\database -p 5432 -l C:\ProgramData\ayanova\logs start" -old batch file settings required for postgres -SET PATH="%~dp0postgres\bin";%PATH% -SET PGDATA=%~dp0data\database -SET PGDATABASE=AyaNova -SET PGUSER=postgres -SET PGPORT=5432 -SET PGLOCALEDIR=%~dp0postgres\share\locale -set AYANOVA_USE_URLS=http://*:7575; -set AYANOVA_DB_CONNECTION=Server=localhost;Username=postgres;Password=mypasswordforpostgres;Database=AyaNova; -set AYANOVA_DEFAULT_TRANSLATION=en -set AYANOVA_BACKUP_PG_DUMP_PATH=%~dp0postgres\bin\ -set AYANOVA_DATA_PATH=%~dp0data -"%~dp0\postgres\bin\pg_ctl" -D "%~dp0/data/database" -l %~dp0data\logs\postgreslog start -*/ +//PGProcess.BeginOutputReadLine(); //================== LAUNCH AYANOVA SERVER ================== -//Go UP one folder from the current launcher folder which should *always* be contained within the AyaNova.exe containing folder if it was installed - +var ServerProcess = new Process(); ProcessStartInfo ServerStartInfo = new ProcessStartInfo(Path.Combine(AyaNovaProgramFolder, "AyaNova.exe")); //ServerStartInfo.FileName = "AyaNova.exe"; ServerStartInfo.WorkingDirectory = AyaNovaProgramFolder; ServerStartInfo.UseShellExecute = false; -var ServerProcess = Process.Start(ServerStartInfo); +ServerStartInfo.RedirectStandardOutput = true; +//ServerStartInfo.RedirectStandardError=true; +ServerProcess.StartInfo = ServerStartInfo; +ServerProcess.OutputDataReceived += new DataReceivedEventHandler(AyaNovaOutputHandler); +//process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler); + +ServerProcess.Start(); +ServerProcess.BeginOutputReadLine(); //================== WAIT FOR SHUTDOWN ================ -Console.WriteLine("Waiting for server to exit; do not close this window"); + if (ServerProcess != null) ServerProcess.WaitForExit(); //shutdown postgres if (PGProcess != null) { - PGProcess.CloseMainWindow(); + Console.WriteLine("Shutting down Postgres database server..."); + PGProcess.StandardInput.Close(); + // PGProcess.CloseMainWindow(); + // PGProcess.Close(); PGProcess.WaitForExit(); + Console.WriteLine("Postgres shut down, exiting."); } -// ####################### OLD SHIT ################################ +static void AyaNovaOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) +{ + //* Do your stuff with the output (write to console/log/StringBuilder) + Console.WriteLine($"{outLine.Data}"); + if (outLine.Data != null && outLine.Data.Contains("COMPLETED - SERVER OPEN")) + { + Process.Start(new ProcessStartInfo(){FileName="http://localhost:7575/api/v8/",UseShellExecute=true}); + Process.Start(new ProcessStartInfo(){FileName="http://localhost:7575",UseShellExecute=true}); + } + // +} + +// static void PostgresOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) +// { +// Console.WriteLine($"DB:{outLine.Data}"); +// } + +// ####################### OLD ################################ //This works but launches three windows