//提交某一问题的solution //@URL: /problems/(\d+) @method: POST func (pc *ProblemController) Submit(Pid string) { restweb.Logger.Debug("Problem Submit") pid, err := strconv.Atoi(Pid) if err != nil { pc.Error("args error", 400) return } var one model.Solution one.Pid = pid one.Uid = pc.Uid one.Module = config.ModuleP one.Mid = config.ModuleP // Todo use pid as mid problemModel := model.ProblemModel{} pro, err := problemModel.Detail(pid) if err != nil { pc.Error(err.Error(), 500) return } code := pc.Input.Get("code") one.Code = code one.Length = pc.GetCodeLen(len(pc.Input.Get("code"))) one.Language, _ = strconv.Atoi(pc.Input.Get("compiler_id")) pc.SetSession("Compiler_id", pc.Input.Get("compiler_id")) //or set cookie? userModel := model.UserModel{} user, _ := userModel.Detail(pc.Uid) one.Share = user.ShareCode hint := make(map[string]string) errflag := true switch { case pro.Pid == 0: hint["info"] = "No such problem." case code == "": hint["info"] = "Your source code is too short." default: errflag = false } if errflag { b, _ := json.Marshal(&hint) pc.W.WriteHeader(400) pc.W.Write(b) return } one.Status = config.StatusAvailable one.Judge = config.JudgePD solutionModel := model.SolutionModel{} sid, err := solutionModel.Insert(one) if err != nil { pc.Error(err.Error(), 500) return } pc.W.WriteHeader(201) go func() { //编译运行solution one := make(map[string]interface{}) one["Sid"] = sid one["Pid"] = pro.RPid one["OJ"] = pro.ROJ one["Rejudge"] = false reader, _ := pc.JsonReader(&one) restweb.Logger.Debug(reader) _, err := http.Post(config.JudgeHost, "application/json", reader) if err != nil { restweb.Logger.Debug("sid[", sid, "] submit post error") } }() }