ExecuteResult Compile(string code,Record.LanguageType language,NativeRunner runner) { runner.PutFile("code."+commands[language]["extname"][0],Encoding.UTF8.GetBytes(code)); return runner.Execute(commands[language]["compile"][0],commands[language]["compileargv"],CompileMemory,CompileTime,-1,RestrictionLevel.Loose,null); }
/// <summary> /// 提交题目 record只需要填充 Code 和 Language /// </summary> /// <param name="record"></param> /// <exception cref="UserNotLoginException"></exception> /// <exception cref="ContestNotStartedException"></exception> /// <exception cref="NotAttendedContestException"></exception> /// <exception cref="ProblemLockedException"></exception> public Guid Submit(Record record) { if (null == User.CurrentUser) throw new UserNotLoginException(); using (var db = new CHDB()) { (from u in db.USERs where u.ID == User.CurrentUser.ID select u).Single().PreferLanguage = (int)record.Language; var currpro = (from p in db.PROBLEMs where p.ID == ID select p).Single(); if (!contest.Owner.Contains(User.CurrentUser.name) && !User.CurrentUser.IsAdmin) { if (DateTime.Now < contest.RelativeStartTime) throw new ContestNotStartedException(); if (!contest.IsAttended()) throw new NotAttendedContestException(); } if (contest.Type == Domain.Contest.ContestType.CF && IsLock() && contest.RelativeNow < contest.RelativeEndTime) throw new ProblemLockedException(); Guid ret; db.RECORDs.Add(new RECORD() { Code = record.Code, CodeLength = record.Code.Length, Detail = null, ExecutedTime = null, ID = ret = Guid.NewGuid(), Language = (int)record.Language, MemoryUsed = null, PROBLEM1 = (from p in db.PROBLEMs where p.ID == ID select p).Single(), USER1 = (from u in db.USERs where u.Name == User.CurrentUser.name select u).Single(), Status = (int)Record.StatusType.Pending, SubmitTime = DateTime.Now, VirtualSubmitTime = GetVirtualSubmitTime(currpro) }); db.SaveChanges(); return ret; } }