Esempio n. 1
0
        private void StreamingCallback(object sender, StreamEventArgs e)
        {
            var json = Twitch.Utility.DynamicJson.Parse(e.Data);

            Entity.Status status;

            try
            {
                status = new Entity.Status(json.ToString());
            }
            catch
            {
                if (!this.IsTolerance)
                {
                    throw new ApplicationException(
                              "不明なメッセージが発行されました。\"" + json.ToString() + "\"" + Environment.NewLine +
                              "この種の予期しないメッセージに対して例外を発生させない場合は、このStreamの IsTolerance プロパティを true に設定してください。");
                }
                return;
            }

            this.OnStatusUpdated(
                new StatusUpdatedEventArgs
            {
                Status = status
            }
                );
        }
Esempio n. 2
0
        /// <summary>
        /// Obtiene el estado por defecto. Estado con ID=0.
        /// </summary>
        /// <returns><c>Entity.Status</c></returns>
        public Entity.Status GetDefault()
        {
            Entity.Status ret   = null;
            var           query = from q in _context.Status
                                  where q.Id == 0 // TODO No debe ir este cero quemado
                                  select q;

            ret = query.FirstOrDefault();
            return(ret);
        }
Esempio n. 3
0
        public Status(Entity.Status status)
        {
            var statistics  = new int[Entity.CommonEnums.JudgeResultDisplay.Count()];
            var _statistics = from jt in status.JudgeTasks
                              group jt.ResultAsInt by jt.ResultAsInt into g
                              select new KeyValuePair <int, int>(g.Key, g.Count());

            foreach (var item in _statistics)
            {
                statistics[item.Key] = item.Value;
            }
            var _result = "";

            Result = status.Result.ToString();
            //if (status.Result == Entity.JudgeResult.Pending)
            //    _result = "Pending";
            //else if (status.Result == Entity.JudgeResult.Running)
            //    _result = "Running";
            //else if (status.Result == Entity.JudgeResult.Accepted)
            //    _result = "Accepted";
            //else if (status.Result == Entity.JudgeResult.Hidden)
            //    _result = "Hidden";
            //else
            //    _result = "Not Accepted";
            ID           = status.ID;
            _Nickname    = status.User.Nickname;
            Nickname     = Helpers.ColorName.GetNicknameHtml(status.User.Nickname, status.User.Ratings.Sum(x => x.Credit) + 1500);
            TimeTip      = Helpers.Time.ToTimeTip(status.Time);
            Result       = Entity.CommonEnums.JudgeResultDisplay[status.ResultAsInt];
            ResultAsInt  = status.ResultAsInt;
            PointCount   = status.JudgeTasks.Count;
            ProblemTitle = status.Problem.Title;
            ProblemID    = status.ProblemID;
            ContestID    = status.Problem.ContestID;
            Gravatar     = "<img src='" + Helpers.Gravatar.GetAvatarURL(status.User.Gravatar, 180) + "' />";
            Statistics   = statistics;
            UserID       = status.UserID;
            MemoryUsage  = status.JudgeTasks.Sum(x => x.MemoryUsage);
            TimeUsage    = status.JudgeTasks.Sum(x => x.TimeUsage);
            Language     = Entity.CommonEnums.LanguageDisplay[status.LanguageAsInt];
        }
Esempio n. 4
0
        public ActionResult Create(int problem_id, string code, int language_id)
        {
            var problem = DbContext.Problems.Find(problem_id);
            var user    = (Entity.User)ViewBag.CurrentUser;

            if (problem == null)
            {
                return(Content("Problem not existed"));
            }
            var contest = problem.Contest;

            if (!Helpers.PrivateContest.IsUserInPrivateContest(ViewBag.CurrentUser == null ? null : (Entity.User)ViewBag.CurrentUser, contest))
            {
                return(Content("Insufficient permissions"));
            }
            Entity.ContestFormat[] SubmitAnyTime = { Entity.ContestFormat.ACM, Entity.ContestFormat.OI, Entity.ContestFormat.OPJOI };
            if (DateTime.Now < contest.Begin && user.Role < Entity.UserRole.Master && !(from m in contest.Managers select m.ID).ToList().Contains(user.ID))
            {
                return(Content("Insufficient permissions"));
            }
            if (contest.Format == Entity.ContestFormat.Codeforces && problem.Locks.Where(x => x.UserID == user.ID).Count() > 0 && DateTime.Now < contest.End)
            {
                return(Content("Locked"));
            }
            if (contest.Format == Entity.ContestFormat.TopCoder && DateTime.Now >= contest.RestBegin && DateTime.Now < contest.End)
            {
                return(Content("Wrong phase"));
            }
            var status = new Entity.Status
            {
                Code          = code,
                LanguageAsInt = language_id,
                ProblemID     = problem_id,
                Public        = true,
                UserID        = user.ID,
                Time          = DateTime.Now,
                Result        = Entity.JudgeResult.Pending
            };

            DbContext.Statuses.Add(status);
            List <int> testcase_ids;

            if (DateTime.Now < contest.Begin || DateTime.Now >= contest.End || contest.Format == Entity.ContestFormat.ACM || contest.Format == Entity.ContestFormat.OPJOI || contest.Format == Entity.ContestFormat.OI)
            {
                testcase_ids = (from tc in problem.TestCases
                                where tc.Type != Entity.TestCaseType.Sample
                                orderby tc.Type ascending
                                select tc.ID).ToList();
            }
            else if (contest.Format == Entity.ContestFormat.Codeforces)
            {
                testcase_ids = (from tc in problem.TestCases
                                where tc.Type == Entity.TestCaseType.Unilateralism
                                orderby tc.Type ascending
                                select tc.ID).ToList();
                var statuses = problem.GetContestStatuses().Where(x => x.UserID == user.ID).ToList();
                foreach (var s in statuses)
                {
                    if (s.JudgeTasks == null)
                    {
                        continue;
                    }
                    foreach (var jt in s.JudgeTasks)
                    {
                        testcase_ids.Add(jt.TestCaseID);
                    }
                }
                testcase_ids = testcase_ids.Distinct().ToList();
            }
            else
            {
                if (DateTime.Now < contest.RestBegin)
                {
                    testcase_ids = (from tc in problem.TestCases
                                    where tc.Type == Entity.TestCaseType.Sample
                                    orderby tc.Type ascending
                                    select tc.ID).ToList();
                }
                else
                {
                    testcase_ids = (from tc in problem.TestCases
                                    where tc.Type != Entity.TestCaseType.Sample
                                    orderby tc.Type ascending
                                    select tc.ID).ToList();
                }
            }
            foreach (var id in testcase_ids)
            {
                DbContext.JudgeTasks.Add(new Entity.JudgeTask
                {
                    StatusID    = status.ID,
                    TestCaseID  = id,
                    Result      = Entity.JudgeResult.Pending,
                    MemoryUsage = 0,
                    TimeUsage   = 0,
                    Hint        = ""
                });
            }
            DbContext.SaveChanges();
            foreach (var jt in status.JudgeTasks)
            {
                try
                {
                    var group = SignalR.JudgeHub.GetNode();
                    if (group == null)
                    {
                        return(Content("No Online Judger"));
                    }
                    SignalR.JudgeHub.context.Clients.Group(group).Judge(new Judge.Models.JudgeTask(jt));
                    SignalR.JudgeHub.ThreadBusy(group);
                    jt.Result = Entity.JudgeResult.Running;
                    DbContext.SaveChanges();
                }
                catch { }
            }
            SignalR.CodeCombHub.context.Clients.All.onStatusCreated(new Models.View.Status(status));//推送新状态
            if (contest.Format == Entity.ContestFormat.OI && DateTime.Now >= contest.Begin && DateTime.Now < contest.End)
            {
                return(Content("OI"));
            }
            return(Content(status.ID.ToString()));
        }