コード例 #1
0
ファイル: HackResult.cs プロジェクト: yukozh/CodeComb-Old
 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;
 }
コード例 #2
0
ファイル: HackResult.cs プロジェクト: yukozh/CodeComb-Old
 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;
 }
コード例 #3
0
ファイル: HackTask.cs プロジェクト: yukozh/CodeComb-Old
 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;
 }
コード例 #4
0
        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"));
            }
        }