From e5327ac946684143b199e63338f5def867d56440 Mon Sep 17 00:00:00 2001 From: Brett Hewitson Date: Tue, 21 Jun 2022 21:36:55 +1000 Subject: [PATCH] Nuget package updates - Newtonsoft.Json - changed arkdata code to only check NON STEAM players 10 times, then stop. --- src/ARKServerManager/ARKServerManager.csproj | 4 ++-- src/ARKServerManager/Lib/ViewModel/PlayerInfo.cs | 1 + src/ARKServerManager/packages.config | 2 +- src/ArkData/ArkData.csproj | 2 +- src/ArkData/DataContainerAsync.cs | 11 ++++++----- src/ArkData/DataContainerBase.cs | 12 +++++++++++- src/ArkData/DataContainerSync.cs | 11 ++++++----- src/ArkData/PlayerData.cs | 3 ++- src/ConanData/ConanData.csproj | 1 - src/ConanData/DataContainerBase.cs | 4 +--- src/ConanServerManager/ConanServerManager.csproj | 4 ++-- src/ConanServerManager/packages.config | 2 +- src/ServerManager.Common/ServerManager.Common.csproj | 2 +- 13 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/ARKServerManager/ARKServerManager.csproj b/src/ARKServerManager/ARKServerManager.csproj index f83480c2..ea1750af 100644 --- a/src/ARKServerManager/ARKServerManager.csproj +++ b/src/ARKServerManager/ARKServerManager.csproj @@ -168,8 +168,8 @@ ..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll True - - ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\packages\NLog.5.0.1\lib\net46\NLog.dll diff --git a/src/ARKServerManager/Lib/ViewModel/PlayerInfo.cs b/src/ARKServerManager/Lib/ViewModel/PlayerInfo.cs index 012abc90..3f6a7db4 100644 --- a/src/ARKServerManager/Lib/ViewModel/PlayerInfo.cs +++ b/src/ARKServerManager/Lib/ViewModel/PlayerInfo.cs @@ -127,6 +127,7 @@ namespace ServerManagerTool.Lib.ViewModel.RCON if (PlayerData?.PlayerName != null) playerData.PlayerName = PlayerData.PlayerName; playerData.LastPlatformUpdateUtc = PlayerData?.LastPlatformUpdateUtc ?? DateTime.MinValue; + playerData.NoUpdateCount = PlayerData?.NoUpdateCount ?? 0; } #region INotifyPropertyChanged diff --git a/src/ARKServerManager/packages.config b/src/ARKServerManager/packages.config index c39cb0e9..aedfb2f8 100644 --- a/src/ARKServerManager/packages.config +++ b/src/ARKServerManager/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/ArkData/ArkData.csproj b/src/ArkData/ArkData.csproj index 1482b2c3..396bd952 100644 --- a/src/ArkData/ArkData.csproj +++ b/src/ArkData/ArkData.csproj @@ -11,7 +11,7 @@ false - + diff --git a/src/ArkData/DataContainerAsync.cs b/src/ArkData/DataContainerAsync.cs index 6a5472e2..deec8eb9 100644 --- a/src/ArkData/DataContainerAsync.cs +++ b/src/ArkData/DataContainerAsync.cs @@ -60,12 +60,13 @@ namespace ArkData /// The async task context. public async Task LoadSteamAsync(string apiKey, int steamUpdateInterval = 0) { - const int MAX_STEAM_IDS = 100; - // need to make multiple calls of 100 steam id's. var lastSteamUpdateUtc = DateTime.UtcNow; var startIndex = 0; - var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId); + var playerSteamIds = Players + .Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow && p.NoUpdateCount < MAX_INVALID_COUNT) + .Select(p => p.PlayerId) + .ToArray(); while (true) { @@ -78,7 +79,7 @@ namespace ArkData using (var client = new HttpClient()) { - client.BaseAddress = new System.Uri("https://api.steampowered.com/"); + client.BaseAddress = new Uri("https://api.steampowered.com/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); @@ -86,7 +87,7 @@ namespace ArkData if (response.IsSuccessStatusCode) using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync())) { - LinkSteamProfiles(await reader.ReadToEndAsync(), lastSteamUpdateUtc); + LinkSteamProfiles(await reader.ReadToEndAsync(), lastSteamUpdateUtc, playerSteamIds); } else throw new System.Net.WebException("The Steam API request was unsuccessful. Are you using a valid key?"); diff --git a/src/ArkData/DataContainerBase.cs b/src/ArkData/DataContainerBase.cs index 99525a09..f3fb021c 100644 --- a/src/ArkData/DataContainerBase.cs +++ b/src/ArkData/DataContainerBase.cs @@ -13,6 +13,9 @@ namespace ArkData { public partial class DataContainer { + const int MAX_STEAM_IDS = 100; + const int MAX_INVALID_COUNT = 10; + /// /// A list of all players registered on the server. /// @@ -86,7 +89,7 @@ namespace ArkData /// Deserializes JSON from Steam API and links Steam profile to player profile. /// /// The JSON data string. - private void LinkSteamProfiles(string jsonString, DateTime lastSteamUpdateUtc) + private void LinkSteamProfiles(string jsonString, DateTime lastSteamUpdateUtc, string[] playerSteamIds) { var profiles = JsonConvert.DeserializeObject>(jsonString).response.players; @@ -96,6 +99,13 @@ namespace ArkData 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]); + 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 b1d36194..1e352cfd 100644 --- a/src/ArkData/DataContainerSync.cs +++ b/src/ArkData/DataContainerSync.cs @@ -58,12 +58,13 @@ namespace ArkData /// The Steam API key public DateTime LoadSteam(string apiKey, int steamUpdateInterval = 0) { - const int MAX_STEAM_IDS = 100; - // need to make multiple calls of 100 steam id's. var lastSteamUpdateUtc = DateTime.UtcNow; var startIndex = 0; - var playerSteamIds = Players.Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow).Select(p => p.PlayerId); + var playerSteamIds = Players + .Where(p => p.LastPlatformUpdateUtc.AddMinutes(steamUpdateInterval) < DateTime.UtcNow && p.NoUpdateCount < MAX_INVALID_COUNT) + .Select(p => p.PlayerId) + .ToArray(); while (true) { @@ -76,7 +77,7 @@ namespace ArkData using (var client = new HttpClient()) { - client.BaseAddress = new System.Uri("https://api.steampowered.com/"); + client.BaseAddress = new Uri("https://api.steampowered.com/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); @@ -84,7 +85,7 @@ namespace ArkData if (response.IsSuccessStatusCode) using (var reader = new StreamReader(response.Content.ReadAsStreamAsync().Result)) { - LinkSteamProfiles(reader.ReadToEnd(), lastSteamUpdateUtc); + LinkSteamProfiles(reader.ReadToEnd(), lastSteamUpdateUtc, playerSteamIds); } else throw new System.Net.WebException("The Steam API request was unsuccessful. Are you using a valid key?"); diff --git a/src/ArkData/PlayerData.cs b/src/ArkData/PlayerData.cs index 1df3ae98..20c24bc6 100644 --- a/src/ArkData/PlayerData.cs +++ b/src/ArkData/PlayerData.cs @@ -20,5 +20,6 @@ namespace ArkData public virtual List OwnedTribes { get; set; } public DateTime LastPlatformUpdateUtc { get; set; } - } + public int NoUpdateCount { get; set; } +} } diff --git a/src/ConanData/ConanData.csproj b/src/ConanData/ConanData.csproj index 431ddf30..2d5d94d9 100644 --- a/src/ConanData/ConanData.csproj +++ b/src/ConanData/ConanData.csproj @@ -11,7 +11,6 @@ false - diff --git a/src/ConanData/DataContainerBase.cs b/src/ConanData/DataContainerBase.cs index 2c9e2e14..6ffa75d9 100644 --- a/src/ConanData/DataContainerBase.cs +++ b/src/ConanData/DataContainerBase.cs @@ -1,6 +1,4 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; /// diff --git a/src/ConanServerManager/ConanServerManager.csproj b/src/ConanServerManager/ConanServerManager.csproj index 33130a77..a6be5846 100644 --- a/src/ConanServerManager/ConanServerManager.csproj +++ b/src/ConanServerManager/ConanServerManager.csproj @@ -153,8 +153,8 @@ ..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - - ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll ..\packages\NLog.5.0.1\lib\net46\NLog.dll diff --git a/src/ConanServerManager/packages.config b/src/ConanServerManager/packages.config index 10028972..c6f5dae5 100644 --- a/src/ConanServerManager/packages.config +++ b/src/ConanServerManager/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/ServerManager.Common/ServerManager.Common.csproj b/src/ServerManager.Common/ServerManager.Common.csproj index 313be02d..cf0c75fa 100644 --- a/src/ServerManager.Common/ServerManager.Common.csproj +++ b/src/ServerManager.Common/ServerManager.Common.csproj @@ -18,7 +18,7 @@ - +