/* * Метод отвечающий за сбор результата с клиента. Если существует родительская задача, её состояние обновляется. * Предполагается, что метод выполняется в фоновом для пользователя режиме. * Идентификатор пользователя берется из значения сессии. * Входные параметры: * 1) Строка с идентификатором задачи. В строке должно находиться целое неотрицательное число или -1. * По умолчанию стоит -1, что обозначает, что нужный идентификатор не был установлен. * Все прочие значения являются ошибкой. * 2) Строка с ответом на задачу. Ограничения не накладываются. * Выходные параметры: * ActionResult, с помощью которого пользователю предоставляется страница TransferOut. * Побочные эффекты: * 1) Ответ записывается в файл с № задачи. * 2) В ходе работы может модифицироваться файл /App_Data/log.txt; */ public ActionResult TransferOut(string task, string result) { try { int taskId = Convert.ToInt32(task);//каким-то образом получили id решеной задачи Models.DatabaseMediator db = new Models.DatabaseMediator(System.Web.HttpContext.Current.Server.MapPath("~")); Models.Task t = db.loadTask(taskId); //нашли нужную задачу t.setAnswer(result); //записали ответ db.saveTask(t); //сохранили в базу int userId = (int)System.Web.HttpContext.Current.Session["user_id"]; User u = db.getUser(userId); u.resetTask(); db.updateUser(u); int parent = t.getParentTaskId(); if (parent != -1) //если есть родитель пишем результат в родителя { Models.Task t2 = db.loadTask(parent); //нашли родительскую задачу bool fin = t2.updateTask(result); //обновили её db.saveTask(t2); db.close(); if (fin) {//если все данные родительской задачи получены, то ставим на выполнение Models.Scheduler s = new Models.Scheduler(System.Web.HttpContext.Current.Server.MapPath("~")); while (!s.setTask(t2)) { System.Threading.Thread.Sleep(2000); } } } } catch (Exception e) { System.IO.File.AppendAllText(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/log.txt"), e.Message); ViewBag.MessagerFromControl = "Произошла ошибка, зайдите позже."; return(View("Master")); } return(View()); }
/* * Метод в котором проверяется решает ли пользователь с данным идентификатором задачу поставленную текущим пользователем. * Идентификатор текущего пользователя берется из значения сессии. * Входные данные: * Идентификатор проверяемого пользователя: целое неотрицательное число или -1. * По умолчанию стоит -1, что обозначает, что нужный идентификатор не был установлен. * Все прочие значения являются ошибкой. * Выходные данные: * Булева переменная, обозначающая ответ. */ public bool checkUser(int id) { try { int masterId = (int)System.Web.HttpContext.Current.Session["user_id"]; Models.DatabaseMediator db = new Models.DatabaseMediator(System.Web.HttpContext.Current.Server.MapPath("~")); Task t = db.getUser(id).getTask(); if (t == null) { return(true); } while (t.getParentTaskId() != -1) { t = db.loadTask(t.getParentTaskId()); } return(t.getOwnerId() != masterId); } catch (Exception e) { throw e; } }