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);
 }
Beispiel #2
0
 /// <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;
     }
 }