Skip to content

Commit caf0ee2

Browse files
committed
Season 10 Update
* Refactor stats object for proper JSON deserialization, rather than use a dynamic object. * Add Assists, Points, and Periods Played stats.
1 parent 1420c5c commit caf0ee2

7 files changed

Lines changed: 239 additions & 115 deletions

File tree

ReboundLogParser/ReboundLogParser/MainForm.Designer.cs

Lines changed: 13 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ReboundLogParser/ReboundLogParser/MainForm.cs

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.IO;
66
using CefSharp.WinForms;
77
using Newtonsoft.Json;
8-
using Newtonsoft.Json.Linq;
98

109
namespace ReboundLogParser {
1110
public partial class MainForm : Form
@@ -27,11 +26,12 @@ public partial class MainForm : Form
2726
private ChromiumWebBrowser _browser;
2827
private List<ComboBox> _homePlayerBoxes;
2928
private List<ComboBox> _awayPlayerBoxes;
29+
private List<Match> _parsedLogs = new List<Match>();
30+
private Match _match;
3031

3132
public MainForm()
3233
{
3334
CefSettings cefSettings = new CefSettings();
34-
CefSharp.Cef.EnableHighDPISupport();
3535
CefSharp.Cef.Initialize(cefSettings);
3636

3737
InitializeComponent();
@@ -120,7 +120,7 @@ private void ResetFormData()
120120
LogFileName.Text = String.Empty;
121121
}
122122

123-
static bool LoadAndParseLogFiles(List<string> fileNames = null)
123+
private bool LoadAndParseLogFiles(List<string> fileNames = null)
124124
{
125125
bool success = false;
126126
fileNames = fileNames ?? new List<string>();
@@ -133,6 +133,7 @@ static bool LoadAndParseLogFiles(List<string> fileNames = null)
133133
}
134134
_loadedFile += $"{fileName}; ";
135135
}
136+
TabulateSelectedLogs();
136137

137138
_multipleFiles = fileNames.Count > 1;
138139
_loadedFile = (fileNames.Count() < 1) ? "Problem Loading Files!" : _loadedFile;
@@ -181,12 +182,12 @@ private void PopulateDataGrid()
181182
awayDataGrid.DataSource = _awayTeamPlayers;
182183
}
183184

184-
static bool ParseJson(string fileName)
185+
private bool ParseJson(string fileName)
185186
{
186-
dynamic o1 = new JObject();
187+
_match = null;
187188
try
188189
{
189-
o1 = JObject.Parse(File.ReadAllText(fileName));
190+
_match = JsonConvert.DeserializeObject<Match>(File.ReadAllText(fileName));
190191
}
191192
catch (JsonReaderException jex)
192193
{
@@ -199,55 +200,63 @@ static bool ParseJson(string fileName)
199200
return false;
200201
}
201202

202-
_overTime = CheckOvertime(o1);
203-
string homeScoreString = o1.score.home;
204-
string awayScoreString = o1.score.away;
205-
string periodString = o1.current_period;
206-
_homeScore += int.Parse(homeScoreString);
207-
_awayScore += int.Parse(awayScoreString);
208-
_period = int.Parse(periodString);
209-
_currentPeriod = o1.current_period;
210-
foreach (dynamic player in o1.players)
203+
_parsedLogs.Add(_match);
204+
205+
return true;
206+
}
207+
208+
private bool TabulateSelectedLogs()
209+
{
210+
_parsedLogs.Sort(delegate (Match m1, Match m2) { return m1.CurrentPeriod.CompareTo(m2.CurrentPeriod); });
211+
foreach (Match o1 in _parsedLogs)
211212
{
212-
var isHomeTeam = player.team == "home";
213-
var teamToBuild = isHomeTeam ? _homeTeamPlayers : _awayTeamPlayers;
214-
if (PlayerExists(player, teamToBuild))
213+
_overTime = CheckOvertime(o1);
214+
_homeScore += o1.Score.Home;
215+
_awayScore += o1.Score.Away;
216+
_period = int.Parse(o1.CurrentPeriod);
217+
_currentPeriod = o1.CurrentPeriod;
218+
foreach (Player player in o1.Players)
215219
{
216-
for (int p = 0; p < teamToBuild.Count; p++)
220+
var isHomeTeam = player.Team == "home";
221+
var teamToBuild = isHomeTeam ? _homeTeamPlayers : _awayTeamPlayers;
222+
if (PlayerExists(player, teamToBuild))
217223
{
218-
if (teamToBuild[p].PlayerName == player.username.ToString())
224+
for (int p = 0; p < teamToBuild.Count; p++)
219225
{
220-
teamToBuild[p].addValues(player);
226+
if (teamToBuild[p].PlayerName == player.Username)
227+
{
228+
teamToBuild[p].addValues(player);
229+
}
221230
}
222231
}
232+
else
233+
{
234+
teamToBuild.Add(new stats(player));
235+
}
223236
}
224-
else
225-
{
226-
teamToBuild.Add(new stats(player));
227-
}
237+
_homeTeamPlayers.Sort(delegate (stats c1, stats c2) { return c1.PlayerName.CompareTo(c2.PlayerName); });
238+
_awayTeamPlayers.Sort(delegate (stats c1, stats c2) { return c1.PlayerName.CompareTo(c2.PlayerName); });
228239
}
229-
_homeTeamPlayers.Sort(delegate (stats c1, stats c2) { return c1.PlayerName.CompareTo(c2.PlayerName); });
230-
_awayTeamPlayers.Sort(delegate (stats c1, stats c2) { return c1.PlayerName.CompareTo(c2.PlayerName); });
231240

232241
return true;
233242
}
234243

235-
static bool CheckOvertime(dynamic statsObject)
244+
private bool CheckOvertime(Match statsObject)
236245
{
237246
bool returnBool = false;
238247
double homeTeamOT = 0;
239248
double awayTeamOT = 0;
240249

241250
for (int i = 0; i < 5; i++)
242251
{
243-
if (statsObject.players[i].team == "away")
252+
if (statsObject.Players[i].Team == "away")
244253
{
245254
break;
246255
}
247256

248257
try
249258
{
250-
homeTeamOT = statsObject.players[i].stats.overtime_wins;
259+
homeTeamOT = statsObject.Players[i].Stats.OvertimeWins;
251260
}
252261
catch
253262
{
@@ -258,7 +267,7 @@ static bool CheckOvertime(dynamic statsObject)
258267
{
259268
try
260269
{
261-
awayTeamOT = statsObject.players[i].stats.overtime_losses;
270+
awayTeamOT = statsObject.Players[i].Stats.OvertimeLosses;
262271
}
263272
catch
264273
{
@@ -280,12 +289,12 @@ static bool CheckOvertime(dynamic statsObject)
280289
return returnBool;
281290
}
282291

283-
static bool PlayerExists(dynamic passedPlayer, List<stats> playerArray)
292+
static bool PlayerExists(Player passedPlayer, List<stats> playerArray)
284293
{
285294
bool returnValue = false;
286295
for (int j = 0; j < playerArray.Count; j++)
287296
{
288-
if (playerArray[j].PlayerName == passedPlayer.username.ToString())
297+
if (playerArray[j].PlayerName == passedPlayer.Username)
289298
{
290299
returnValue = true;
291300
}
@@ -462,7 +471,9 @@ private void ClearLogsButton_Click(object sender, EventArgs e)
462471
{
463472
_loadedFiles.Clear();
464473
_lastLoadedFiles.Clear();
474+
_parsedLogs.Clear();
465475
ResetFormData();
476+
MultipleFiles.Visible = false;
466477
}
467478
}
468479
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using Newtonsoft.Json;
2+
using System.Collections.Generic;
3+
4+
namespace ReboundLogParser
5+
{
6+
public class Match
7+
{
8+
public string Type { get; set; }
9+
public string Winner { get; set; }
10+
public string Arena { get; set; }
11+
[JsonProperty("periods_enabled")]
12+
public string PeriodsEnabled { get; set; }
13+
[JsonProperty("current_period")]
14+
public string CurrentPeriod { get; set; }
15+
[JsonProperty("custom_mercy_rule")]
16+
public string CustomMercyRule { get; set; }
17+
[JsonProperty("match_length")]
18+
public string MatchLength { get; set; }
19+
[JsonProperty("end_reason")]
20+
public string EndReason { get; set; }
21+
public Score Score { get; set; }
22+
public List<Player> Players { get; set; }
23+
24+
}
25+
26+
public class Score
27+
{
28+
public int Home { get; set; }
29+
public int Away { get; set; }
30+
}
31+
32+
public class Player
33+
{
34+
[JsonProperty("game_user_id")]
35+
public string GameUserId { get; set; }
36+
public string Team { get; set; }
37+
public Stats Stats { get; set; }
38+
public string Username { get; set; }
39+
}
40+
41+
public class Stats
42+
{
43+
// Standard Stats
44+
public double Goals { get; set; }
45+
public double Assists { get; set; }
46+
[JsonProperty("primary_assists")]
47+
public double PrimaryAssists { get; set; }
48+
[JsonProperty("secondary_assists")]
49+
public double SecondaryAssists { get; set; }
50+
public double Shots { get; set; }
51+
public double Saves { get; set; }
52+
[JsonProperty("faceoffs_won")]
53+
public double FaceoffsWon { get; set; }
54+
[JsonProperty("faceoffs_lost")]
55+
public double FaceoffsLost { get; set; }
56+
public double Takeaways { get; set; }
57+
public double Turnovers { get; set; }
58+
[JsonProperty("post_hits")]
59+
public double PostHits { get; set; }
60+
public double Passes { get; set; }
61+
public double Blocks { get; set; }
62+
[JsonProperty("game_winning_goals")]
63+
public double GameWinningGoals { get; set; }
64+
[JsonProperty("possession_time_sec")]
65+
public double PossessionTimeSec { get; set; }
66+
67+
// Extended Stats
68+
[JsonProperty("contributed_goals")]
69+
public double ContributedGoals { get; set; }
70+
[JsonProperty("conceded_goals")]
71+
public double ConcededGoals { get; set; }
72+
[JsonProperty("games_played")]
73+
public double GamesPlayed { get; set; }
74+
public double Wins { get; set; }
75+
public double Losses { get; set; }
76+
public double Score { get; set; }
77+
[JsonProperty("shutouts_against")]
78+
public double ShutoutsAgainst { get; set; }
79+
public double Shutouts { get; set; }
80+
[JsonProperty("overtime_wins")]
81+
public double OvertimeWins { get; set; }
82+
[JsonProperty("overtime_losses")]
83+
public double OvertimeLosses { get; set; }
84+
}
85+
}

0 commit comments

Comments
 (0)