public IActionResult SolveStart(string id, bool stopOnSolution, double duration = 1) { var ident = PuzzleIdent.Parse(id); var p = compLib.GetPuzzleWithCaching(ident); var solver = new MultiThreadedForwardReverseSolver(new SolverNodeFactoryPoolingConcurrentBag("byteseq")); var solverCommand = new SolverCommand() { Puzzle = p.Puzzle, ExitConditions = new ExitConditions() { Duration = TimeSpan.FromMinutes(duration), StopOnSolution = true } }; var model = new SolverModel() { Token = DateTime.Now.Ticks, Puzzle = p, Command = solverCommand, State = solver.Init(solverCommand) }; staticState[model.Token] = model; model.Task = Task.Run(() => { solver.Solve(model.State); model.IsFinished = true; }); return(RedirectToAction("SolveMem", new { id, token = model.Token })); }
public IActionResult StartFromFile(string file) { var fileName = Path.GetFileName(file); var ident = PuzzleIdent.Parse(fileName.Substring(0, fileName.IndexOf("-"))); var p = compLib.GetPuzzleWithCaching(ident); var solver = new MultiThreadedForwardReverseSolver(new SolverNodeFactoryPoolingConcurrentBag("byteseq")); var solverCommand = new SolverCommand() { Puzzle = p.Puzzle, ExitConditions = new ExitConditions() { Duration = TimeSpan.FromMinutes(0), StopOnSolution = true } }; var model = new SolverModel() { Token = DateTime.Now.Ticks, Puzzle = p, Command = solverCommand, }; staticState[model.Token] = model; model.Task = Task.Run(() => { var ser = new BinaryNodeSerializer(); using (var f = System.IO.File.OpenRead(file)) { using (var br = new BinaryReader(f)) { model.RootForward = ser.AssembleTree(br); } } model.IsFinished = true; }); return(RedirectToAction("SolveMem", new { id = ident.ToString(), token = model.Token })); }