public async void getData() { Classes.CustomSnapshotRoot root = null; Classes.KeeperAPI keeper = new Classes.KeeperAPI(); Action workAction = delegate { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate { root = keeper.getKeeperInfo(guid); }; worker.RunWorkerCompleted += async delegate { if (root == null) { if (extendedStats.Count == 0) { lblSaved.Content = "Something went wrong with the server"; //Potentially exit the form here! _timer.Enabled = false; MessageBox.Show("The server crashed or was never available. \n Please close this window."); this.Close(); return; } else { forceSave(); extendedStats.Clear(); return; } } if (!root.snapshot.status.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase)) { return; } try { int t1count = root.snapshot.teamInfo.team1.player.Count; int t2count = root.snapshot.teamInfo.team2.player.Count; int totalPlayers = t1count + t2count; lblTime.Content = "Round Time: " + Classes.UsefulFunctions.getTime(root.snapshot.roundTime, 1); lblCountPlayers.Content = "Getting Statistics for " + totalPlayers.ToString() + " players"; lblMap.Content = "Map: " + Classes.JSONHelper.whatMap(root.snapshot.mapId); lblMode.Content = "Mode: " + Classes.JSONHelper.whatMode(root.snapshot.modeId); foreach (var player in root.snapshot.teamInfo.team1.player) { Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); player.kit = playerInfo.selectedKit; player.primaryWeapon = playerInfo.kitList[Convert.ToInt32(playerInfo.selectedKit)].kitIdInformation[0]; player.secondaryWeapon = playerInfo.kitList[Convert.ToInt32(playerInfo.selectedKit)].kitIdInformation[1]; } foreach (var player in root.snapshot.teamInfo.team2.player) { Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); player.kit = playerInfo.selectedKit; player.primaryWeapon = playerInfo.kitList[Convert.ToInt32(playerInfo.selectedKit)].kitIdInformation[0]; player.secondaryWeapon = playerInfo.kitList[Convert.ToInt32(playerInfo.selectedKit)].kitIdInformation[1]; } this.Title = "Logging: " + totalPlayers.ToString() + "P | " + Classes.UsefulFunctions.getTime(root.snapshot.roundTime, 1) + " | " + Classes.JSONHelper.whatMap(root.snapshot.mapId); if (root.snapshot.roundTime != 0) { extendedStats.Add(root); } bool descrEnabled = false; if ((bool)cbAddDescrAuto.IsChecked) { descrEnabled = true; } Classes.DataExport export = new Classes.DataExport(extendedStats, root); string fileName; if (descrEnabled == true) { fileName = export.saveOrNot(txtDescription.Text); if (fileName != "") { lblSaved.Content = "Last Saved at: " + DateTime.Now.ToString(); if (cbOpenOnFinish.IsChecked == true) { XAML.AddBombs addBombs = new XAML.AddBombs(Classes.UsefulFunctions.getFullReport(fileName), fileName); addBombs.Show(); } fileName = null; extendedStats.Clear(); } } else { fileName = export.saveOrNot(txtDescription.Text); if (fileName != "") { lblSaved.Content = "Last Saved at: " + DateTime.Now.ToString(); if (cbOpenOnFinish.IsChecked == true) { XAML.AddBombs addBombs = new XAML.AddBombs(Classes.UsefulFunctions.getFullReport(fileName), fileName); addBombs.Show(); } fileName = null; extendedStats.Clear(); } } } catch (Exception ex) { Classes.Logger.addLog("Guid: " + guid + "|" + root.ToString() + ":" + ex.ToString(), 1); } }; worker.RunWorkerAsync(); }; await Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction); }
public async void _timer_Elapsed(object sender, ElapsedEventArgs e) { classCounts = null; classCounts = new classCounters(); Classes.CustomSnapshotRoot root = null; Classes.KeeperAPI keeper = new Classes.KeeperAPI(); Action workAction = delegate { BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += delegate { root = keeper.getKeeperInfo(guid); }; worker.RunWorkerCompleted += async delegate { try { if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "US") { imgFaction1.Source = loadBitmap(Properties.Resources.usa); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "CN") { imgFaction1.Source = loadBitmap(Properties.Resources.china); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "RU") { imgFaction1.Source = loadBitmap(Properties.Resources.ru); } if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "US") { imgFaction2.Source = loadBitmap(Properties.Resources.usa); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "CN") { imgFaction2.Source = loadBitmap(Properties.Resources.china); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "RU") { imgFaction2.Source = loadBitmap(Properties.Resources.ru); } foreach (var player in root.snapshot.teamInfo.team1.player) { Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); switch (playerInfo.selectedKit.ToString()) { case "0": classCounts.t1Assault += 1; if (playerInfo.kitList[0].kitIdInformation[3] != 2887915611 && playerInfo.kitList[0].kitIdInformation[4] != 2887915611) { classCounts.defib += 1; } break; //2887915611 case "1": classCounts.t1Engineer += 1; break; case "2": classCounts.t1Support += 1; break; case "3": classCounts.t1Recon += 1; break; default: break; } } //Assault pbAssault1.Value = classCounts.t1Assault; lblt1Assault.Content = classCounts.t1Assault.ToString(); //Engineer pbEngineer1.Value = classCounts.t1Engineer; lblt1Engineer.Content = classCounts.t1Engineer.ToString(); //Support pbSupport1.Value = classCounts.t1Support; lblt1Support.Content = classCounts.t1Support.ToString(); //Recon pbRecon1.Value = classCounts.t1Recon; lblt1Recon.Content = classCounts.t1Recon.ToString(); foreach (var player in root.snapshot.teamInfo.team2.player) { Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); switch (playerInfo.selectedKit.ToString()) { case "0": classCounts.t2Assault += 1; if (playerInfo.kitList[0].kitIdInformation[3] != 2887915611 && playerInfo.kitList[0].kitIdInformation[4] != 2887915611) { classCounts.defib += 1; } break; case "1": classCounts.t2Engineer += 1; break; case "2": classCounts.t2Support += 1; break; case "3": classCounts.t2Recon += 1; break; default: break; } } //Assault pbAssault2.Value = classCounts.t2Assault; lblt2Assault.Content = classCounts.t2Assault.ToString(); //Support pbEngineer2.Value = classCounts.t2Engineer; lblt2Engineer.Content = classCounts.t2Engineer.ToString(); //Engineer pbSupport2.Value = classCounts.t2Support; lblt2Support.Content = classCounts.t2Support.ToString(); //Recon pbRecon2.Value = classCounts.t2Recon; lblt2Recon.Content = classCounts.t2Recon.ToString(); lblAssaultPlayerWithDefibs.Content = classCounts.defib.ToString(); } catch (Exception ex) { Classes.Logger.addLog(ex.ToString(), 1); } //Update code in here }; worker.RunWorkerAsync(); }; await Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction); }
public async void ScoreboardRenderer1(XAML.Scoreboard parent, string mapID, CustomSnapshotRoot root, string teamlogo1 = "", string teamlogo2 = "") { if ((root.snapshot.teamInfo.team1.player.Count + root.snapshot.teamInfo.team2.player.Count) > 10) { return; } string teamLogoDir = Directory.GetCurrentDirectory() + "\\images\\team_logos\\"; string scoreboardTemplate = Directory.GetCurrentDirectory() + "\\images\\background\\bg.png"; if (root == null) { return; } //Set up where to output the image to m_parent = parent; //Get the map image from resources Dynamically object O = Properties.Resources.ResourceManager.GetObject(mapID.ToLower()); //Font type Gdi.Font font = new Gdi.Font("Trebuchet MS", 20f, System.Drawing.FontStyle.Bold); //Load the scoreboard template image Gdi.Bitmap bitmap = null; try { bitmap = new Gdi.Bitmap(scoreboardTemplate); }catch (Exception) { bitmap = Properties.Resources.bg; } Gdi.Bitmap clone = new Gdi.Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); Gdi.Graphics gr = Gdi.Graphics.FromImage(clone); gr.DrawImage(bitmap, new Gdi.Rectangle(0, 0, clone.Width, clone.Height)); //bitmap.MakeTransparent(); //bitmap. //Load the bitmap to a gdi graphic Gdi.Graphics g = Gdi.Graphics.FromImage(bitmap); g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.TextRenderingHint = Gdi.Text.TextRenderingHint.AntiAliasGridFit; Gdi.Bitmap team1Logo = null; Gdi.Bitmap team2Logo = null; //========= Team 1s Logo if (teamlogo1 == "") { if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "US") { team1Logo = new Gdi.Bitmap(Properties.Resources.usa); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "CN") { team1Logo = new Gdi.Bitmap(Properties.Resources.china); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) == "RU") { team1Logo = new Gdi.Bitmap(Properties.Resources.ru); } } else { team1Logo = new Gdi.Bitmap(teamLogoDir + teamlogo1); } //Load the map image to a bitmap g.DrawImage(resize(250, 250, (Gdi.Image)team1Logo), 200, 360); //========= Team 2s Logo if (teamlogo2 == "") { if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "US") { team2Logo = new Gdi.Bitmap(Properties.Resources.usa); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "CN") { team2Logo = new Gdi.Bitmap(Properties.Resources.china); } else if (Classes.JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) == "RU") { team2Logo = new Gdi.Bitmap(Properties.Resources.ru); } } else { team2Logo = new Gdi.Bitmap(teamLogoDir + teamlogo2); } //Load the map image to a bitmap g.DrawImage(resize(250, 250, (Gdi.Image)team2Logo), 1000, 360); Gdi.Bitmap map = new Gdi.Bitmap(resize(350, 170, (Gdi.Image)O)); //draw the map image onto the scoreboard template g.DrawImage(map, 1200, 880); map.Dispose(); map = null; //draw a string onto the map image g.DrawString(JSONHelper.whatMap(root.snapshot.mapId), font, Gdi.Brushes.White, 1480, 880); g.DrawString(JSONHelper.whatMode(root.snapshot.modeId), font, Gdi.Brushes.White, 1480, 910); g.DrawString(UsefulFunctions.getTime(root.snapshot.roundTime, 1), font, Gdi.Brushes.White, 1480, 940); //Draw player names for team 1 and team 2 with player data to the scoreboard //http://battlelog.battlefield.com/bf4/servers/show/pc/1ab24458-5ee9-4765-a2e8-fa96c464f506/Resistence-Team-Server-SQOBLITERATION-5on5-ESL-Rules-ON/ int row = 560; int max = 58; int team1Kills = 0; int team1Deaths = 0; int team1Score = 0; g.DrawString(JSONHelper.whatFaction(root.snapshot.teamInfo.team1.faction) + " - " + root.snapshot.team1Tickets.tickets.ToString() + "/" + root.snapshot.team1Tickets.ticketsMax.ToString() , font, Gdi.Brushes.White, 200, 330); foreach (var player in root.snapshot.teamInfo.team1.player) { if (player.tag != "") { string playerName = "[" + player.tag + "]" + player.name; g.DrawString(playerName, font, Gdi.Brushes.White, 190, row); } else { g.DrawString(player.name, font, Gdi.Brushes.White, 190, row); } //Draw Players Kit Gdi.Bitmap kitIcon = null; Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); switch (playerInfo.selectedKit.ToString()) { case "0": kitIcon = Properties.Resources._0; break; case "1": kitIcon = Properties.Resources._1; break; case "2": kitIcon = Properties.Resources._2; break; case "3": kitIcon = Properties.Resources._3; break; default: kitIcon = Properties.Resources._0; break; } g.DrawImage((Gdi.Image)kitIcon, 165, row); g.DrawString(player.score.ToString(), font, Gdi.Brushes.White, 480, row); g.DrawString(player.kills.ToString(), font, Gdi.Brushes.White, 620, row); g.DrawString(player.deaths.ToString(), font, Gdi.Brushes.White, 725, row); if (player.bombDetonationTime != null) { int i = 1; foreach (var time in player.bombDetonationTime) { g.DrawString(Classes.UsefulFunctions.getTime(time, 1), font, Gdi.Brushes.White, 850, (row + 35) - (i * 26)); i += 1; } } row = row + max; team1Kills += player.kills; team1Deaths += player.deaths; team1Score += player.score; kitIcon.Dispose(); } //------------------------------------ //------------- Draw Team Totals g.DrawString(team1Score.ToString(), font, Gdi.Brushes.White, 480, 835); g.DrawString(team1Kills.ToString(), font, Gdi.Brushes.White, 620, 835); g.DrawString(team1Deaths.ToString(), font, Gdi.Brushes.White, 725, 835); //------------------------------------- row = 560; int rightOffset = 815; g.DrawString(JSONHelper.whatFaction(root.snapshot.teamInfo.team2.faction) + " - " + root.snapshot.team2Tickets.tickets.ToString() + "/" + root.snapshot.team2Tickets.ticketsMax.ToString() , font, Gdi.Brushes.White, 200 + rightOffset, 330); int team2Kills = 0; int team2Deaths = 0; int team2Score = 0; foreach (var player in root.snapshot.teamInfo.team2.player) { if (player.tag != "") { string playerName = "[" + player.tag + "]" + player.name; g.DrawString(playerName, font, Gdi.Brushes.White, 190 + rightOffset, row); } else { g.DrawString(player.name, font, Gdi.Brushes.White, 190 + rightOffset, row); } Gdi.Bitmap kitIcon = null; Classes.Structs.PlayerLoadout playerInfo = await Classes.GetPlayersKit.GetWeaponInfo(player.playerId, player.name); switch (playerInfo.selectedKit.ToString()) { case "0": kitIcon = Properties.Resources._0; break; case "1": kitIcon = Properties.Resources._1; break; case "2": kitIcon = Properties.Resources._2; break; case "3": kitIcon = Properties.Resources._3; break; } g.DrawImage((Gdi.Image)kitIcon, 165 + rightOffset, row); g.DrawString(player.score.ToString(), font, Gdi.Brushes.White, 480 + rightOffset, row); g.DrawString(player.kills.ToString(), font, Gdi.Brushes.White, 620 + rightOffset, row); g.DrawString(player.deaths.ToString(), font, Gdi.Brushes.White, 725 + rightOffset, row); if (player.bombDetonationTime != null) { int i = 1; foreach (var time in player.bombDetonationTime) { g.DrawString(Classes.UsefulFunctions.getTime(time, 1), font, Gdi.Brushes.White, 850 + rightOffset, (row + 35) - (i * 26)); i += 1; } } row = row + max; team2Kills += player.kills; team2Deaths += player.deaths; team2Score += player.score; kitIcon.Dispose(); } //------------------------------------ //------------- Draw Team Totals g.DrawString(team2Score.ToString(), font, Gdi.Brushes.White, 480 + rightOffset, 835); g.DrawString(team2Kills.ToString(), font, Gdi.Brushes.White, 620 + rightOffset, 835); g.DrawString(team2Deaths.ToString(), font, Gdi.Brushes.White, 725 + rightOffset, 835); //------------------------------------- //Convert to ui readable image ImageSource bitmapSource = loadBitmap(bitmap); /*ImageSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), * IntPtr.Zero, * Int32Rect.Empty, * BitmapSizeOptions.FromEmptyOptions());*/ //Try and dispose everything if (bitmapSource != null) { m_parent.image.Source = bitmapSource; } font.Dispose(); clone.Dispose(); g.Dispose(); bitmap.Dispose(); team1Logo.Dispose(); team2Logo.Dispose(); gr.Dispose(); // Create a writeable bitmap (which is a valid WPF Image Source }