Пример #1
0
        private void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                RequirementsProcessor rp = new RequirementsProcessor(GetType());
                rp.ProcessRequirements();
                //Page.Response.AddHeader("Refresh","300");
                if (rp.ContestIDDefined)
                {
                    selcon.ContestID = rp.ContestID;

                    Contest con = Contest.GetContest(rp.ContestID);
                    if (con.Time == ContestTime.Forthcoming)
                    {
                        throw new NeJudgeException("Нельзя просмотреть монитор будущего соревнования");
                    }
                    DateTime cur_time = TimeUtils.ZeroDateTime(DateTime.Now);
                    DateTime t_begin  = TimeUtils.ZeroDateTime(con.Beginning);
                    DateTime t_end    = TimeUtils.ZeroDateTime(con.Ending);

                    // Последнее обновление
                    TimeSpan dur       = TimeUtils.ZeroTimeSpan(t_end - t_begin);
                    TimeSpan elapsed   = TimeUtils.ZeroTimeSpan((cur_time - t_begin < dur) ? cur_time - t_begin : dur);
                    TimeSpan estimated = TimeUtils.ZeroTimeSpan(dur - elapsed);
                    if (elapsed >= dur)
                    {
                        st_label.InnerHtml += "<span style='color:red;font-size:small;display:block;'>(Соревнование окончено)</span>";
                    }
                    refresh.Text = TimeUtils.BeautifyTimeSpan(elapsed, false);
                    // Продолжительность соревнования
                    period.Text = TimeUtils.BeautifyTimeSpan(dur, false);
                    left.Text   = TimeUtils.BeautifyTimeSpan(estimated, false);


                    ContestTypeHandler h   = Factory.GetHandlerInstance(con.Type);
                    DataTable[]        dts = h.MonitorManager.Build(con.ID);
                    for (int i = 0; i < dts.Length; i++)
                    {
                        DataTable dt = dts[i];
                        monitorPH.Controls.Add(new LiteralControl(dt.TableName));
                        DataGrid gv = new DataGrid();
                        gv.Width                = new Unit(100.0, UnitType.Percentage);
                        gv.CellPadding          = 5;
                        gv.HeaderStyle.CssClass = "gridHeader";
                        gv.DataSource           = dt;
                        gv.DataBind();
                        h.MonitorManager.PaintDataGrid(gv, i, dt.Columns.Count - 3);
                        monitorPH.Controls.Add(gv);
                        if (i != dts.Length - 1)
                        {
                            monitorPH.Controls.Add(new LiteralControl("<br />"));
                        }
                    }
                }
                else
                {
                    info.Visible = false;
                }
            }
        }
 public void RaiseCallbackEvent(string eventArgument)
 {
     result = "";
     try
     {
         string[] tmp = eventArgument.Split(':');
         if (tmp.Length == 2)
         {
             int contestID;
             if (int.TryParse(tmp[0], out contestID))
             {
                 result += "--Ћюбой--^ALL|";
                 ContestTypeHandler h = Factory.GetHandlerInstance(Contest.GetContest(contestID).Type);
                 foreach (string outcome in h.OutcomeManager.GetOutcomes())
                 {
                     result += string.Format("{0}^{1}|", h.OutcomeManager.GetPrintableValue(outcome), outcome);
                 }
             }
             else
             {
                 result = "ќшибка в обработке Callback^1";
             }
         }
     }
     catch { result = "ќшибка в обработке Callback^1"; }
 }
Пример #3
0
        public static DataTable GetRows(int maximumRows, int startRowIndex, object filter)
        {
            SubmissionsFilter filt = (SubmissionsFilter)filter;
            int cid = filt.ContestID;

            filt.From = startRowIndex + 1;             //( page - 1 ) * statusGrid.PageSize + 1;
            filt.To   = startRowIndex + maximumRows;   //page * statusGrid.PageSize;

            DataTable dt = new DataTable();

            dt.Columns.Add("ID");
            dt.Columns.Add("Время");
            dt.Columns.Add("Команда");
            dt.Columns.Add("Задача");
            dt.Columns.Add("Язык");
            dt.Columns.Add("Статус");

            Contest            con = Contest.GetContest(cid);
            ContestTypeHandler h   = Factory.GetHandlerInstance(con.Type);

            string[] headers = h.StatusManager.GetHeaders();
            foreach (string s in headers)
            {
                dt.Columns.Add(s);
            }
            foreach (Submission s in Submission.GetSubmissions(filt))
            {
                DataRow dr = dt.NewRow();
                dr["ID"]      = s.ID;
                dr["Время"]   = TimeUtils.BeautifyTimeSpan(s.Time - con.Beginning, true);
                dr["Команда"] = User.GetUser(s.UserID).Name;
                dr["Задача"]  = String.Format("<a href='{0}'>{1}</a>", UrlRenderer.RenderProblemUrl(s.ProblemID),
                                              Problem.GetProblem(s.ProblemID).ShortName);
                dr["Язык"]   = Language.GetLanguage(s.LanguageID).Name;
                dr["Статус"] = h.OutcomeManager.GetPrintableValue(s.Outcome);

                string[] ins = h.StatusManager.GetInfo(s);
                for (int i = 0; i < headers.Length; i++)
                {
                    dr[i + 6] = ins[i];
                }
                dt.Rows.Add(dr);
            }
            return(dt);
        }