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 @@
-
+