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 } ); }
/// <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); }
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]; }
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())); }