예제 #1
0
        /*
         * Метод отвечающий за сбор результата с клиента. Если существует родительская задача, её состояние обновляется.
         * Предполагается, что метод выполняется в фоновом для пользователя режиме.
         * Идентификатор пользователя берется из значения сессии.
         * Входные параметры:
         * 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());
        }
예제 #2
0
 /*
  * Метод в котором проверяется решает ли пользователь с данным идентификатором задачу поставленную текущим пользователем.
  * Идентификатор текущего пользователя берется из значения сессии.
  * Входные данные:
  * Идентификатор проверяемого пользователя: целое неотрицательное число или -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;
     }
 }