public HackResult(Entity.Hack hack) { ID = hack.ID; HackerID = hack.HackerID; HackerName = Helpers.ColorName.GetNicknameHtml(hack.Hacker.Nickname, hack.Hacker.Ratings.Sum(x => x.Credit) + 1500); HackerGravatar = Helpers.Gravatar.GetAvatarURL(hack.Hacker.Gravatar, 180); DefenderID = hack.DefenderID; DefenderName = Helpers.ColorName.GetNicknameHtml(hack.Defender.Nickname, hack.Defender.Ratings.Sum(x => x.Credit) + 1500); DefenderGravatar = Helpers.Gravatar.GetAvatarURL(hack.Defender.Gravatar, 180); Result = Entity.CommonEnums.HackResultDisplay[hack.ResultAsInt]; if (hack.Result == Entity.HackResult.Success) { Css = "status-text-ac"; } else if (hack.Result == Entity.HackResult.BadData || hack.Result == Entity.HackResult.DatamakerError || hack.Result == Entity.HackResult.SystemError) { Css = "status-text-tle"; } else if (hack.Result == Entity.HackResult.Failure) { Css = "status-text-wa"; } else { Css = "status-text-pending"; } ProblemID = hack.Status.ProblemID; ProblemTitle = hack.Status.Problem.Title; StatusID = hack.StatusID; }
public HackResult(Entity.Hack hack, bool Defender) { ID = hack.ID; HackerID = hack.HackerID; HackerName = Helpers.ColorName.GetNicknameHtml(hack.Hacker.Nickname, hack.Hacker.Ratings.Sum(x => x.Credit) + 1500); HackerGravatar = Helpers.Gravatar.GetAvatarURL(hack.Hacker.Gravatar, 180); DefenderID = hack.DefenderID; DefenderName = Helpers.ColorName.GetNicknameHtml(hack.Defender.Nickname, hack.Defender.Ratings.Sum(x => x.Credit) + 1500); DefenderGravatar = Helpers.Gravatar.GetAvatarURL(hack.Defender.Gravatar, 180); Result = "Hacked"; Css = "status-text-wa"; ProblemID = hack.Status.ProblemID; ProblemTitle = hack.Status.Problem.Title; StatusID = hack.StatusID; }
public HackTask(Entity.Hack hack) { HackID = hack.ID; StatusID = hack.StatusID; Code = hack.Status.Code; CodeLanguage = hack.Status.Language; SpecialJudgeCode = hack.Status.Problem.SpecialJudge; SpecialJudgeCodeLanguage = hack.Status.Problem.SpecialJudgeLanguage; RangeValidatorCode = hack.Status.Problem.RangeChecker; RangeValidatorCodeLanguage = hack.Status.Problem.RangeCheckerLanguage; StandardCode = hack.Status.Problem.StandardSource; StandardCodeLanguage = hack.Status.Problem.StandardSourceLanguage; DataMakerCode = hack.DataMakerCode; DataMakerCodeLanguage = hack.DataMakerLanguage; InputData = hack.InputData; TimeLimit = hack.Status.Problem.TimeLimit; MemoryLimit = hack.Status.Problem.MemoryLimit; }
public ActionResult Hack(int id, string data, string data_maker, int?data_maker_language) { var Available = false; #region 判断是否允许hack var user = (Entity.User)ViewBag.CurrentUser; var status = DbContext.Statuses.Find(id); var contest = status.Problem.Contest; if (!Helpers.PrivateContest.IsUserInPrivateContest(ViewBag.CurrentUser == null ? null : (Entity.User)ViewBag.CurrentUser, contest)) { return(RedirectToAction("Private", "Contest", new { id = id })); } var problem = status.Problem; var ret = new Models.View.HackCode(); if (contest.Format != Entity.ContestFormat.Codeforces && contest.Format != Entity.ContestFormat.TopCoder) { Available = false; } if (contest.Format == Entity.ContestFormat.Codeforces) { var locked = (from l in DbContext.Locks where l.ProblemID == problem.ID && l.UserID == user.ID select l).Count(); if (locked == 0) { Available = false; } else { Available = true; } } else { if (DateTime.Now < contest.RestEnd || DateTime.Now > contest.End) { Available = false; } else { Available = true; } } #endregion if (Available) { var hack = new Entity.Hack { HackerID = ViewBag.CurrentUser.ID, DefenderID = status.User.ID, Result = Entity.HackResult.Pending, StatusID = status.ID, DataMakerCode = "", DataMakerLanguage = Entity.Language.C, Time = DateTime.Now, Hint = "" }; if (data_maker_language == null) { hack.InputData = data; } else { hack.DataMakerCode = data_maker; hack.DataMakerLanguageAsInt = data_maker_language.Value; } DbContext.Hacks.Add(hack); DbContext.SaveChanges(); try { var group = SignalR.JudgeHub.GetNode(); if (group == null) { return(Content("err")); } SignalR.JudgeHub.context.Clients.Group(group).Hack(new Judge.Models.HackTask(hack)); SignalR.JudgeHub.ThreadBusy(group); hack.Result = Entity.HackResult.Running; DbContext.SaveChanges(); } catch { } return(Content(hack.ID.ToString())); } else { return(Content("err")); } }