public async Task <IEmulatorTaskResult> ExecuteEmulationAsync(IEmulatorTask task) { // IFileRecord fileToExecute = task.EmulatingGame.WithFiles().FirstOrDefault(f => this.Properties.Mimetypes.Contains(f.MimeType)); IFileRecord fileToExecute = null; if (fileToExecute == null) { throw new FileNotFoundException( $"Unable to find a compatible ROM for game {task.EmulatingGame.RecordId}."); } IEmulatorTaskResult result = new RetroArchTaskResult(task.ProcessTaskRoot, task.GameSaveLocation); IProcessBuilder builder = this.RetroArchExecutable.GetProcessBuilder(); builder.WithArgument("--verbose") .WithArgument("-s", task.ProcessTaskRoot.SaveDirectory.FullName) .WithArgument("-c", Path.Combine(task.ProcessTaskRoot.ConfigurationDirectory.FullName, "retroarch.cfg")) .WithArgument("-L", Path.Combine(this.CoreDirectory.FullName, task.Pragmas["retroarch_core"])); // .WithArgument(fileToExecute.); foreach (var cfg in this.BuildConfiguration(task.EmulatorConfiguration, task.ControllerConfiguration)) { await File.WriteAllTextAsync(Path.Combine(task.ProcessTaskRoot.ConfigurationDirectory.FullName, task.EmulatorConfiguration.Descriptor.Outputs[cfg.Key].Destination), cfg.Value); } var psi = builder.ToProcessStartInfo(); var process = Process.Start(psi); process.Exited += (s, e) => result.Closed(); return(result); }
public DirectoryInfo GetTaskRoot(IEmulatorTask task) { return(this.EmulatorTaskRoot.CreateSubdirectory(task.TaskIdentifier.ToString())); }