Пример #1
0
        private void Button1_Click(object sender, EventArgs e)
        {
            int pid = selprob.PID;

            using (BaseDb db = DbFactory.ConstructDatabase())
            {
                int tid = db.GetTid(pid);
                if (db.GetContest(tid).Now)
                {
                    if (Page.IsValid)
                    {
                        string extension = "";
                        switch (languageDropDownList.SelectedValue)
                        {
                        case "Pascal":
                            extension = "pas";
                            break;

                        case "C++":
                            extension = "cpp";
                            break;

                        case "C":
                            extension = "c";
                            break;

                        default:
                            extension = "cpp";
                            break;
                        }

                        string temp = Path.GetTempFileName();

                        if (sourceTextBox.Text.Trim() != "")
                        {
                            StreamWriter sw = null;
                            try
                            {
                                sw = new StreamWriter(temp);
                                sw.WriteLine(sourceTextBox.Text.Trim());
                            }
                            finally
                            {
                                if (sw != null)
                                {
                                    sw.Close();
                                }
                            }
                        }
                        else
                        {
                            if (fileBrowser.PostedFile != null)
                            {
                                fileBrowser.PostedFile.SaveAs(temp);
                            }
                        }

                        int        uid = db.GetUid(Page.User.Identity.Name);                  //TODO
                        Language   l   = (Language)Enum.Parse(typeof(Language), extension, true);
                        Submission s   = new Submission(pid, uid, tid, DateTime.Now, l);
                        int        sid = db.AddSubmission(s);
                        if (Directory.Exists(Path.Combine(Config.SubmissionsDirectory, sid.ToString())))
                        {
                            Directory.Delete(Path.Combine(Config.SubmissionsDirectory, sid.ToString()));
                        }
                        Directory.CreateDirectory(Path.Combine(Config.SubmissionsDirectory, sid.ToString()));
                        File.Move(temp, Path.Combine(Path.Combine(
                                                         Config.SubmissionsDirectory, sid.ToString()), "sln." + extension)); //TODO:переделать

                        DfTest dt = new DfTest(pid.ToString(), sid.ToString(), l.ToString());
                        Thread t  = new Thread(new ThreadStart(dt.CheckSolution));
                        Response.Redirect("~/status.aspx?tid=" + tid, false);
                        t.Start();
                    }
                }
                else
                {
                    throw new NeJudgeInvalidParametersException("pid");                    //"Соревнование либо закончилась, либо ещё не начиналось.";
                }
            }
        }