/// <summary> /// This request provides details on a particular players map info /// </summary> /// <queryParam name="pid" type="int">The unique player ID</queryParam> /// <queryParam name="mapid" type="int">The unique map ID</queryParam> /// <queryParam name="customonly" type="int">Defines whether to only display custom maps</queryParam> /// <queryParam name="mapname" type="string">The unique map's name</queryParam> /// <param name="Client">The HttpClient who made the request</param> /// <param name="Driver">The Stats Database Driver. Connection errors are handled in the calling object</param> public GetMapInfo(HttpClient Client, StatsDatabase Driver) { // Setup Variables int Pid = 0, MapId = 0, CustomOnly = 0; string MapName = ""; SelectQueryBuilder Query = new SelectQueryBuilder(Driver); // Setup QueryString Params if (Client.Request.QueryString.ContainsKey("pid")) Int32.TryParse(Client.Request.QueryString["pid"], out Pid); if (Client.Request.QueryString.ContainsKey("mapid")) Int32.TryParse(Client.Request.QueryString["mapid"], out MapId); if (Client.Request.QueryString.ContainsKey("customonly")) Int32.TryParse(Client.Request.QueryString["customonly"], out CustomOnly); if (Client.Request.QueryString.ContainsKey("mapname")) MapName = Client.Request.QueryString["mapname"].Trim(); // Prepare Response Client.Response.WriteResponseStart(); // Is this a Player Map Request? if (Pid != 0) { // Build our query statement Query.SelectFromTable("maps"); Query.SelectColumns("maps.*", "mapinfo.name AS mapname"); Query.AddJoin(JoinType.InnerJoin, "mapinfo", "id", Comparison.Equals, "maps", "mapid"); Query.AddWhere("maps.id", Comparison.Equals, Pid); Query.AddOrderBy("mapid", Sorting.Ascending); // Execute the reader, and add each map to the output Client.Response.WriteHeaderLine("mapid", "mapname", "time", "win", "loss", "best", "worst"); foreach (Dictionary<string, object> Map in Driver.QueryReader(Query.BuildCommand())) Client.Response.WriteDataLine(Map["mapid"], Map["mapname"], Map["time"], Map["win"], Map["loss"], Map["best"], Map["worst"]); } else { // Build our query statement Query.SelectFromTable("mapinfo"); Query.SelectColumns("id", "name", "score", "time", "times", "kills", "deaths"); Query.AddOrderBy("id", Sorting.Ascending); // Select our where statement if (MapId > 0) Query.AddWhere("id", Comparison.Equals, MapId); else if (!String.IsNullOrEmpty(MapName)) Query.AddWhere("name", Comparison.Equals, MapName); else if (CustomOnly == 1) Query.AddWhere("id", Comparison.GreaterOrEquals, 700); // Execute the reader, and add each map to the output Client.Response.WriteHeaderLine("mapid", "name", "score", "time", "times", "kills", "deaths"); foreach (Dictionary<string, object> Map in Driver.QueryReader(Query.BuildCommand())) Client.Response.WriteDataLine(Map["id"], Map["name"], Map["score"], Map["time"], Map["times"], Map["kills"], Map["deaths"]); } // Send Response Client.Response.Send(); }
/// <summary> /// Backs up the asp database /// </summary> private void ExportAsASPBtn_Click(object sender, EventArgs e) { // Define backup folder for this backup, and create it if it doesnt exist string Folder = Path.Combine(Paths.DocumentsFolder, "Backups", "bak_" + DateTime.Now.ToString("yyyyMMdd_HHmm")); if (!Directory.Exists(Folder)) Directory.CreateDirectory(Folder); // Abortion indicator bool Aborted = false; // Open the database connection StatsDatabase Database; try { Database = new StatsDatabase(); } catch (Exception Ex) { MessageBox.Show( "Unable to connect to database\r\n\r\nMessage: " + Ex.Message, "Database Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error ); // Stop the ASP server, and close this form ASP.ASPServer.Stop(); this.Close(); return; } // Show loading screen LoadingForm.ShowScreen(this); // Backup each table into its own bak file foreach (string Table in StatsDatabase.StatsTables) { // Create file path string BakFile = Path.Combine(Folder, Table + ".bak"); // Backup tables try { using (Stream Str = File.Open(BakFile, FileMode.Create)) using (StreamWriter Wtr = new StreamWriter(Str)) { // Use a memory efficient way to export this stuff foreach (Dictionary<string, object> Row in Database.QueryReader("SELECT * FROM " + Table)) Wtr.WriteLine(String.Join("\t", Row.Values)); Wtr.Flush(); } } catch (Exception Ex) { // Close loading form LoadingForm.CloseForm(); // Display the Exception Form ExceptionForm Form = new ExceptionForm(Ex, false); Form.Message = "An error occured while trying to backup the \"" + Table + "\" table. " + "The backup operation will now be cancelled."; DialogResult Result = Form.ShowDialog(); Aborted = true; // Try and remove backup folder try { DirectoryInfo Dir = new DirectoryInfo(Folder); Dir.Delete(true); } catch { } } if (Aborted) break; } // Only display success message if we didnt abort if (!Aborted) { // Close loading form LoadingForm.CloseForm(); string NL = Environment.NewLine; MessageBox.Show( String.Concat("Backup has been completed successfully!", NL, NL, "Backup files have been saved to:", NL, Folder), "Backup Success", MessageBoxButtons.OK, MessageBoxIcon.Information ); } // Close the connection Database.Dispose(); }