public Controller(IReworkStation reworkStation, IProgramStorage programStorage, IProgramRunStorage programRunStorage, IServerConfig serverConfig) { Get["/programs"] = _ => { Console.WriteLine("Getting programs."); return JArray.FromObject(programStorage.GetPrograms()).ToString(); }; Post["/programs"] = _ => { Console.WriteLine("Updating programs."); programStorage.UpdatePrograms(this.Bind<List<Pc900Program>>()); return @"{""status"":""OK""}"; }; Post["/delete-programs"] = _ => { Console.WriteLine("Deleting programs."); programStorage.DeletePrograms(this.Bind<List<Pc900Program>>()); return @"{""status"":""OK""}"; }; Post["/start-program/{programId}"] = path => { Console.WriteLine("Starting program "+ path.programId.Value + "."); var pc900ProgramRuns = programRunStorage.GetProgramRuns(); if (pc900ProgramRuns.Count > 0) { return JObject.FromObject(pc900ProgramRuns[0]).ToString(); } Pc900Program program = programStorage.GetProgram(path.programId.Value); var programRun = reworkStation.Start(program); programRunStorage.AddProgramRun(programRun); var achiPoller = new AchiPoller(reworkStation, programRunStorage); _poller = new Timer(poll => { if (achiPoller.PollWorker(null)) { _poller.Dispose(); } }, null, 1000, serverConfig.GetProgramRunPollingIntervalMillis()); return JObject.FromObject(programRun).ToString(); }; Get["/current-run/after-point/{afterPoint}"] = path => JObject.FromObject(programRunStorage.GetProgramRuns()[0].CreatePartial(int.Parse(path.afterPoint.Value))).ToString(); Get["/current-run"] = _ => { var pc900ProgramRuns = programRunStorage.GetProgramRuns(); if (pc900ProgramRuns.Count > 0) { return JObject.FromObject(pc900ProgramRuns[0]).ToString(); } return JObject.FromObject(new Pc900ProgramRun("1234", false)).ToString(); }; }