private static CycleGANProcess StartCycleGANProcess(IArgument input, IArgument output) { StringBuilder argumentBuilder = new StringBuilder(); argumentBuilder.Append(input.Argument); if (input is PathArgument) { argumentBuilder.Append($" \"{Uri.UnescapeDataString((input as PathArgument).Value.AbsolutePath)}\""); } else if (input is ByteArrayArgument) { argumentBuilder.Append($" BYTEARRAY"); } argumentBuilder.Append($" {output.Argument} \"{Uri.UnescapeDataString((output as PathArgument).Value.AbsolutePath)}\""); CycleGANProcess process = new CycleGANProcess(); if (!process.Start(argumentBuilder.ToString())) { throw new Exception("Could not start the cycleGANProcess"); } Console.WriteLine($" CycleGAN process started with id: {process.ProcessId}"); return(process); }
private void OnCycleGANProcessTimeout(int cycleGANId) { if (!currentProcesses.ContainsKey(cycleGANId)) //Never existed or already completed { return; } Console.WriteLine($"Timeout reached for {cycleGANId}"); CycleGANProcess cycleGAN = currentProcesses[cycleGANId]; currentProcesses.Remove(cycleGANId); //Kill and Remove cycleGAN.Process.Kill(); }
private void OnCycleGANProcessExit(int cycleGANId) { if (!currentProcesses.ContainsKey(cycleGANId)) //process has been removed due to timeout or previous completion or it was never added { return; } Console.WriteLine($"Exit reached for {cycleGANId}"); CycleGANProcess cycleGAN = currentProcesses[cycleGANId]; currentProcesses.Remove(cycleGANId); cycleGAN.Process = null; AddResult(cycleGAN); }
private void AddResult(CycleGANProcess cycleGAN) { switch (cycleGAN.CycleGANType) { case ProcessType.Single: resultsController.AddResult(new CycleGANSingleResult { ImagePath = cycleGAN.OutputFolder, Created = DateTime.UtcNow }); break; case ProcessType.Batch: resultsController.AddResult(new CycleGANBatchResult { FolderPath = cycleGAN.OutputFolder, Created = DateTime.UtcNow }); break; } }