protected void Page_Load(object sender, EventArgs e) { int postback = 1; if (!Page.IsPostBack) { if (string.IsNullOrEmpty(Request.QueryString["p"])) { Response.Redirect("Default.aspx"); } DropDownLanguage.Attributes.Add("onchange", "fillSampleCode();"); languageId.Clear(); var jss = new JavaScriptSerializer(); string url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/compilers?access_token=" + token; response = client.DownloadString(url); var langObj = jss.Deserialize <Dictionary <string, dynamic> >(response); for (int i = 0; i < langObj["items"].Count; i++) { DropDownLanguage.Items.Add(langObj["items"][i]["name"] + " (" + langObj["items"][i]["ver"] + ")"); languageId.Add(langObj["items"][i]["id"].ToString()); } url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/problems/" + Request.QueryString["p"] + "?access_token=" + token; response = client.DownloadString(url); var problemObj = jss.Deserialize <Dictionary <string, dynamic> >(response); problem.InnerHtml = "<h3><strong>" + problemObj["name"] + "</strong></h3>" + problemObj["body"]; SubmissionDataSource.SelectParameters.Clear(); //Select SubmissionDataSource.SelectParameters.Add("Question", Request.QueryString["p"]); SubmissionDataSource.SelectParameters.Add("Username", Membership.GetUser().UserName); DataSourceSelectArguments args = new DataSourceSelectArguments(); DataView dv = (DataView)SubmissionDataSource.Select(args); if (dv.Table.Rows.Count == 1) { string submissionId = dv.Table.Rows[0]["SubmissionId"].ToString(); url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/submissions/" + submissionId + "?access_token=" + token; response = client.DownloadString(url); var oldSubmission = jss.Deserialize <Dictionary <string, dynamic> >(response); TextBoxCode.Text = oldSubmission["source"]; DropDownLanguage.SelectedIndex = languageId.IndexOf(oldSubmission["language"].ToString()); } else { postback = 0; DropDownLanguage.SelectedIndex = 10; } } Page.ClientScript.RegisterStartupScript(this.GetType(), "init", "init(" + postback.ToString() + ")", true); }
protected void ButtonCompile_Click(object sender, EventArgs e) { var jss = new JavaScriptSerializer(); string url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/compilers?access_token=" + token; if (languageId.Count == 0) { response = client.DownloadString(url); var langObj = jss.Deserialize <Dictionary <string, dynamic> >(response); for (int i = 0; i < langObj["items"].Count; i++) { languageId.Add(langObj["items"][i]["id"].ToString()); } } url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/submissions?access_token=" + token; string code = TextBoxCode.Text; var json = jss.Serialize(code); string jsonData = "{\"compilerId\":" + languageId[DropDownLanguage.SelectedIndex] + ",\"source\":" + json + ",\"problemCode\":\"" + Request.QueryString["p"] + "\"}"; client.Headers.Add("Content-Type", "application/json"); response = client.UploadString(url, "POST", jsonData); var idObj = jss.Deserialize <Dictionary <string, string> >(response); string id = idObj["id"]; bool finished = false; while (!finished) { url = "http://2d73b8c2.problems.sphere-engine.com/api/v3/submissions/" + id + "?access_token=" + token; response = client.DownloadString(url); var resultObj = jss.Deserialize <Dictionary <string, dynamic> >(response); if (resultObj["status"] > 10) { finished = true; testCases = ""; for (int i = 0; i < resultObj["result_array"].Count; i++) { string passed = "check"; if (resultObj["result_array"][i]["statusDescription"] != "accepted") { passed = "close"; } string color = passed == "check" ? "green;" : "red;"; testCases += "<h5><a href=\"#\"><label><i style=\"color:" + color + "\" class=\"fa fa-" + passed + " fa-fw\"></i> Testcase " + (i + 1).ToString() + "</label></a></h5><div class=\"no-padding\" style=\"border:0;\">"; testCases += "<table aria-describedby=\"dataTables-example_info\" role=\"grid\"" + "class=\"table table-responsive table-striped table-bordered table-hover dataTable no-footer dtr-inline\"" + "width=\"100%\"><tbody>"; if (i == 0 && resultObj["result_stdout"].Contains("DATASET NUMBER: 0")) { testCases += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Output</label></td><td>" + resultObj["result_stdout"].Split('\n')[2] + "</td></tr>"; } testCases += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Time</label></td><td>" + resultObj["result_array"][i]["time"] + "</td></tr>"; testCases += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Memory</label></td><td>" + resultObj["result_array"][i]["memory"] + "</td></tr>"; testCases += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Status</label></td><td>" + resultObj["result_array"][i]["statusDescription"] + "</td></tr>"; testCases += "</tbody></table></div>"; } compInfo.InnerHtml = "<table aria-describedby=\"dataTables-example_info\" role=\"grid\"" + "class=\"table table-responsive table-striped table-bordered table-hover dataTable no-footer dtr-inline\"" + "width=\"100%\"><tbody>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Score</label></td><td>" + resultObj["result_score"] + "</td></tr>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>LangName</label></td><td>" + resultObj["compiler"]["name"] + "</td></tr>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Time</label></td><td>" + resultObj["result_time"] + "</td></tr>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Memory</label></td><td>" + resultObj["result_memory"] + "</td></tr>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Signal</label></td><td>" + resultObj["result_signal"] + "</td></tr>"; if (resultObj["result_cmperr"] != "") { compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Compile Error</label></td><td>" + resultObj["result_cmperr"] + "</td></td>"; } compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Status</label></td><td>" + resultObj["statusDescription"] + "</td></tr>"; compInfo.InnerHtml += "<tr role=\"row\" class=\"gradeA odd\"><td><label>Result</label></td><td>"; if (resultObj["status"] == 11) { compInfo.InnerHtml += "Compilation Error"; } if (resultObj["status"] == 12) { compInfo.InnerHtml += "Runtime Error"; } if (resultObj["status"] == 13) { compInfo.InnerHtml += "Time Limit Exceeded"; } if (resultObj["status"] == 14) { compInfo.InnerHtml += "Wrong Answer"; } if (resultObj["status"] == 15) { compInfo.InnerHtml += "Success"; } if (resultObj["status"] == 17) { compInfo.InnerHtml += "Memory Limit Exceeded"; } if (resultObj["status"] == 19) { compInfo.InnerHtml += "Illegal System Call"; } if (resultObj["status"] == 20 || resultObj["status"] == 21) { compInfo.InnerHtml += "Internal Error"; } compInfo.InnerHtml += "</td></tr></tbody></table>"; Page.ClientScript.RegisterStartupScript(this.GetType(), "init", "g1.refresh(" + resultObj["result_score"] + ")", true); SubmissionDataSource.SelectParameters.Clear(); //Select SubmissionDataSource.SelectParameters.Add("Question", Request.QueryString["p"]); SubmissionDataSource.SelectParameters.Add("Username", Membership.GetUser().UserName); DataSourceSelectArguments args = new DataSourceSelectArguments(); DataView dv = (DataView)SubmissionDataSource.Select(args); if (dv.Table.Rows.Count == 1) //Update if exist { SubmissionDataSource.UpdateParameters.Clear(); SubmissionDataSource.UpdateParameters.Add("Score", Convert.ToInt32(resultObj["result_score"]).ToString()); SubmissionDataSource.UpdateParameters.Add("SubmissionId", id); SubmissionDataSource.UpdateParameters.Add("Question", Request.QueryString["p"]); SubmissionDataSource.UpdateParameters.Add("Username", Membership.GetUser().UserName); SubmissionDataSource.UpdateParameters.Add("Date", DateTime.Now.ToString("MM/dd/yyyy HH:mm")); SubmissionDataSource.UpdateParameters.Add("Language", DropDownLanguage.SelectedItem.Text); SubmissionDataSource.Update(); } else //Insert { SubmissionDataSource.InsertParameters.Clear(); SubmissionDataSource.InsertParameters.Add("Score", Convert.ToInt32(resultObj["result_score"]).ToString()); SubmissionDataSource.InsertParameters.Add("SubmissionId", id); SubmissionDataSource.InsertParameters.Add("Question", Request.QueryString["p"]); SubmissionDataSource.InsertParameters.Add("Username", Membership.GetUser().UserName); SubmissionDataSource.InsertParameters.Add("Date", DateTime.Now.ToString("MM/dd/yyyy HH:mm")); SubmissionDataSource.InsertParameters.Add("Language", DropDownLanguage.SelectedItem.Text); SubmissionDataSource.Insert(); } } } }