diff --git a/src/ArkData/DataContainerAsync.cs b/src/ArkData/DataContainerAsync.cs index deec8eb9..221529d8 100644 --- a/src/ArkData/DataContainerAsync.cs +++ b/src/ArkData/DataContainerAsync.cs @@ -40,13 +40,17 @@ namespace ArkData if (playerFiles != null) { foreach (var file in playerFiles) + { container.Players.Add(await Parser.ParsePlayerAsync(file)); + } } if (tribeFiles != null) { foreach (var file in tribeFiles) + { container.Tribes.Add(await Parser.ParseTribeAsync(file)); + } } container.LinkPlayerTribe(); @@ -85,12 +89,16 @@ namespace ArkData var response = await client.GetAsync(string.Format("ISteamUser/GetPlayerSummaries/v0002/?key={0}&steamids={1}", apiKey, builder)); if (response.IsSuccessStatusCode) + { using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync())) { LinkSteamProfiles(await reader.ReadToEndAsync(), lastSteamUpdateUtc, playerSteamIds); } + } else + { throw new System.Net.WebException("The Steam API request was unsuccessful. Are you using a valid key?"); + } } startIndex += steamIdsCount; @@ -109,12 +117,16 @@ namespace ArkData public Task LoadOnlinePlayersAsync(string ipString, int port) { if (SteamLoaded) + { return Task.Run(() => { LinkOnlinePlayers(ipString, port); }); + } else + { throw new System.Exception("The Steam user data should be loaded before the server status can be checked."); + } } } } diff --git a/src/ArkData/DataContainerBase.cs b/src/ArkData/DataContainerBase.cs index f3fb021c..ed019ca0 100644 --- a/src/ArkData/DataContainerBase.cs +++ b/src/ArkData/DataContainerBase.cs @@ -52,11 +52,8 @@ namespace ArkData for (var i = 0; i < Players.Count; i++) { - var online_player = online.SingleOrDefault(p => p.Name == Players[i].PlayerName); - if (online_player != null) - Players[i].Online = true; - else - Players[i].Online = false; + var online_player = online.FirstOrDefault(p => p.Name == Players[i].PlayerName); + Players[i].Online = online_player != null; } } catch (SSQLServerException) @@ -74,13 +71,13 @@ namespace ArkData { var player = Players[i]; player.OwnedTribes = Tribes.Where(t => t.OwnerId == player.CharacterId).ToList(); - player.Tribe = Tribes.SingleOrDefault(t => t.Id == player.TribeId); + player.Tribe = Tribes.FirstOrDefault(t => t.Id == player.TribeId); } for (var i = 0; i < Tribes.Count; i++) { var tribe = Tribes[i]; - tribe.Owner = Players.SingleOrDefault(p => p.CharacterId == tribe.OwnerId); + tribe.Owner = Players.FirstOrDefault(p => p.CharacterId == tribe.OwnerId); tribe.Players = Players.Where(p => p.TribeId == tribe.Id).ToList(); } } @@ -95,16 +92,21 @@ namespace ArkData for (var i = 0; i < profiles.Count; i++) { - var player = Players.Single(p => p.PlayerId == profiles[i].steamid); - player.PlayerName = profiles[i].personaname; - player.LastPlatformUpdateUtc = lastSteamUpdateUtc; + var player = Players.FirstOrDefault(p => p.PlayerId == profiles[i].steamid); + if (player != null) + { + player.PlayerName = profiles[i].personaname; + player.LastPlatformUpdateUtc = lastSteamUpdateUtc; + } } for (var i = 0; i < playerSteamIds.Length; i++) { - var player = Players.SingleOrDefault(p => p.PlayerId == playerSteamIds[i]); + var player = Players.FirstOrDefault(p => p.PlayerId == playerSteamIds[i]); if (player != null && player.LastPlatformUpdateUtc == DateTime.MinValue) + { player.NoUpdateCount = Math.Min(MAX_INVALID_COUNT, player.NoUpdateCount + 1); + } } } } diff --git a/src/ArkData/DataContainerSync.cs b/src/ArkData/DataContainerSync.cs index 1e352cfd..c8571c41 100644 --- a/src/ArkData/DataContainerSync.cs +++ b/src/ArkData/DataContainerSync.cs @@ -38,13 +38,17 @@ namespace ArkData if (playerFiles != null) { foreach (var file in playerFiles) + { container.Players.Add(Parser.ParsePlayer(file)); + } } if (tribeFiles != null) { foreach (var file in tribeFiles) + { container.Tribes.Add(Parser.ParseTribe(file)); + } } container.LinkPlayerTribe(); @@ -83,12 +87,16 @@ namespace ArkData var response = client.GetAsync(string.Format("ISteamUser/GetPlayerSummaries/v0002/?key={0}&steamids={1}", apiKey, builder)).Result; if (response.IsSuccessStatusCode) + { using (var reader = new StreamReader(response.Content.ReadAsStreamAsync().Result)) { LinkSteamProfiles(reader.ReadToEnd(), lastSteamUpdateUtc, playerSteamIds); } + } else + { throw new System.Net.WebException("The Steam API request was unsuccessful. Are you using a valid key?"); + } } startIndex += steamIdsCount; @@ -110,7 +118,9 @@ namespace ArkData LinkOnlinePlayers(ipString, port); } else - throw new System.Exception("The Steam user data should be loaded before the server status can be checked."); + { + throw new Exception("The Steam user data should be loaded before the server status can be checked."); + } } } }