1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-11-01 13:15:38 +01:00

Compare commits

..

No commits in common. "e6747b0d3a958ae8e16c7a5f6c97888809524ec2" and "e18ebaf0bf02bb602bb472a4d67b9bd05e93d7a3" have entirely different histories.

20 changed files with 171 additions and 340 deletions

View File

@ -1,8 +1,8 @@
Unicode True Unicode True
SetCompressor /SOLID zlib ; LZMA compresses about 20% better but is more likely to trigger AV false positives SetCompressor /SOLID lzma
!define PRODUCT_NAME "Giants: Citizen Kabuto" !define PRODUCT_NAME "Giants: Citizen Kabuto"
!define PRODUCT_VERSION "1.499" !define PRODUCT_VERSION "1.498"
; MUI 1.67 compatible ------ ; MUI 1.67 compatible ------
!include "MUI2.nsh" !include "MUI2.nsh"
@ -42,7 +42,7 @@ SetCompressor /SOLID zlib ; LZMA compresses about 20% better but is more likely
; MUI end ------ ; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Output\GPatch1_499_1_0.exe" OutFile "Output\GPatch1_498_224_0.exe"
InstallDir "$PROGRAMFILES\Giants\" InstallDir "$PROGRAMFILES\Giants\"
InstallDirRegKey HKCU "SOFTWARE\PlanetMoon\Giants" "DestDir" InstallDirRegKey HKCU "SOFTWARE\PlanetMoon\Giants" "DestDir"
ShowInstDetails hide ShowInstDetails hide
@ -67,7 +67,7 @@ Section
MessageBox MB_OK "Setup failed to update DirectX ($0). Please visit www.microsoft.com and download the latest version of the DirectX end user redistributable." MessageBox MB_OK "Setup failed to update DirectX ($0). Please visit www.microsoft.com and download the latest version of the DirectX end user redistributable."
${EndIf} ${EndIf}
ExecWait "$INSTDIR\Redist\VC_redist.x86.exe /install /quiet /norestart /log $\"$Temp\GPatch_VCRedist.txt$\"" $0 ExecWait "$INSTDIR\Redist\VC_redist.x86.exe /install /passive /norestart" $0
${If} $0 != 0 ${If} $0 != 0
${AndIf} $0 != 1638 ;0x666 - Newer version installed ${AndIf} $0 != 1638 ;0x666 - Newer version installed
MessageBox MB_OK "Setup failed to install the Visual C++ Runtime. Please visit www.microsoft.com and download the latest version of the Visual C++ 2019 redistributable." MessageBox MB_OK "Setup failed to install the Visual C++ Runtime. Please visit www.microsoft.com and download the latest version of the Visual C++ 2019 redistributable."

View File

@ -7,7 +7,5 @@
public const string GiantsBeta = nameof(GiantsBeta); public const string GiantsBeta = nameof(GiantsBeta);
public const string GiantsLauncher = nameof(GiantsLauncher); public const string GiantsLauncher = nameof(GiantsLauncher);
public const string GiantsLauncherBeta = nameof(GiantsLauncherBeta);
} }
} }

View File

@ -173,10 +173,8 @@ namespace Giants.Launcher
updateCompletedCallback: this.LauncherForm_DownloadCompletedCallback, updateCompletedCallback: this.LauncherForm_DownloadCompletedCallback,
updateProgressCallback: this.LauncherForm_DownloadProgressCallback); updateProgressCallback: this.LauncherForm_DownloadProgressCallback);
Task<VersionInfo> gameVersionInfo = this.GetVersionInfo( Task<VersionInfo> gameVersionInfo = this.GetVersionInfo(ApplicationNames.Giants);
GetApplicationName(ApplicationType.Game)); Task<VersionInfo> launcherVersionInfo = this.GetVersionInfo(ApplicationNames.GiantsLauncher);
Task<VersionInfo> launcherVersionInfo = this.GetVersionInfo(
GetApplicationName(ApplicationType.Launcher));
await Task.WhenAll(gameVersionInfo, launcherVersionInfo); await Task.WhenAll(gameVersionInfo, launcherVersionInfo);
@ -193,27 +191,6 @@ namespace Giants.Launcher
} }
} }
private static string GetApplicationName(ApplicationType applicationType)
{
switch (applicationType)
{
case ApplicationType.Game:
#if BETA
return ApplicationNames.GiantsBeta;
#else
return ApplicationNames.Giants;
#endif
case ApplicationType.Launcher:
#if BETA
return ApplicationNames.GiantsLauncherBeta;
#else
return ApplicationNames.GiantsLauncher;
#endif
}
throw new ArgumentOutOfRangeException();
}
private async Task<VersionInfo> GetVersionInfo(string appName) private async Task<VersionInfo> GetVersionInfo(string appName)
{ {
VersionInfo versionInfo; VersionInfo versionInfo;

View File

@ -38,6 +38,19 @@ namespace Giants.Launcher
.Disambiguate() .Disambiguate()
.ToList() .ToList()
.ToArray()); .ToArray());
RendererInfo renderer = GameSettings.CompatibleRenderers.Find(
r => StringComparer.OrdinalIgnoreCase.Compare(Path.GetFileName(r.FilePath), GameSettings.Get<string>(RegistryKeys.Renderer)) == 0);
if (renderer != null)
{
this.cmbRenderer.SelectedItem = renderer;
}
else
{
renderer = GameSettings.CompatibleRenderers.Find(r => r.Name == "DirectX 7");
this.cmbRenderer.SelectedItem = renderer;
}
} }
private void SetOptions() private void SetOptions()
@ -53,19 +66,6 @@ namespace Giants.Launcher
this.cmbAntialiasing.SelectedIndex = 0; this.cmbAntialiasing.SelectedIndex = 0;
this.chkUpdates.Checked = GameSettings.Get<int>(RegistryKeys.NoAutoUpdate) != 1; this.chkUpdates.Checked = GameSettings.Get<int>(RegistryKeys.NoAutoUpdate) != 1;
RendererInfo renderer = GameSettings.CompatibleRenderers.Find(
r => StringComparer.OrdinalIgnoreCase.Compare(Path.GetFileName(r.FilePath), GameSettings.Get<string>(RegistryKeys.Renderer)) == 0);
if (renderer != null)
{
this.cmbRenderer.SelectedItem = renderer;
}
else
{
renderer = GameSettings.CompatibleRenderers.Find(r => r.FileName == "gg_dx7r.dll");
this.cmbRenderer.SelectedItem = renderer;
}
} }
private void PopulateAntialiasing() private void PopulateAntialiasing()

View File

@ -11,7 +11,7 @@ namespace Giants.Launcher
{ {
// Constants // Constants
private const string RegistryKey = @"HKEY_CURRENT_USER\Software\PlanetMoon\Giants"; private const string RegistryKey = @"HKEY_CURRENT_USER\Software\PlanetMoon\Giants";
private const int OptionsVersion = 4; private const int OptionsVersion = 3;
private static readonly Dictionary<string, object> Settings = new Dictionary<string, object>(); private static readonly Dictionary<string, object> Settings = new Dictionary<string, object>();

View File

@ -57,26 +57,6 @@
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseBeta|AnyCPU'">
<OutputPath>bin\ReleaseBeta\</OutputPath>
<DefineConstants>TRACE;BETA</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugBeta|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\DebugBeta\</OutputPath>
<DefineConstants>TRACE;DEBUG;BETA</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
@ -233,8 +213,7 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<PostBuildEvent Condition="'$(Configuration)' == 'Release'">xcopy /DY "$(TargetPath)" "$(GIANTS_PATH)\$(TargetFileName)*"</PostBuildEvent> <PostBuildEvent>xcopy /DY "$(TargetPath)" "$(GIANTS_PATH)\$(TargetFileName)*"</PostBuildEvent>
<PostBuildEvent Condition="'$(Configuration)' == 'ReleaseBeta'">xcopy /DY "$(TargetPath)" "$(GIANTS_PATH)\$(TargetFileName)*"</PostBuildEvent>
</PropertyGroup> </PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -27,7 +27,7 @@ namespace Giants.Launcher
public bool IsUpdateRequired(ApplicationType applicationType, VersionInfo versionInfo) public bool IsUpdateRequired(ApplicationType applicationType, VersionInfo versionInfo)
{ {
if (versionInfo != null && this.ToVersion(versionInfo.Version) > this.appVersions[applicationType]) if (this.ToVersion(versionInfo.Version) > this.appVersions[applicationType])
{ {
// Display update prompt // Display update prompt
string updateMsg = applicationType == ApplicationType.Game ? string updateMsg = applicationType == ApplicationType.Game ?

View File

@ -4,7 +4,7 @@
public class ServerInfo : DataContract.V1.ServerInfo, IIdentifiable public class ServerInfo : DataContract.V1.ServerInfo, IIdentifiable
{ {
public string id => $"{this.HostIpAddress}-{this.GameName}-{this.Port}"; public string id => this.HostIpAddress;
public string DocumentType => nameof(ServerInfo); public string DocumentType => nameof(ServerInfo);
@ -17,8 +17,6 @@
return obj is ServerInfo info && return obj is ServerInfo info &&
base.Equals(obj) && base.Equals(obj) &&
this.HostIpAddress == info.HostIpAddress && this.HostIpAddress == info.HostIpAddress &&
this.Port == info.Port &&
this.GameName == info.GameName &&
this.DocumentType == info.DocumentType; this.DocumentType == info.DocumentType;
} }

View File

@ -7,8 +7,6 @@
{ {
Task DeleteServer(string ipAddress); Task DeleteServer(string ipAddress);
Task DeleteServer(string ipAddress, string gameName, int port);
Task<IEnumerable<ServerInfo>> GetAllServers(); Task<IEnumerable<ServerInfo>> GetAllServers();
Task AddServer(ServerInfo server); Task AddServer(ServerInfo server);

View File

@ -4,18 +4,16 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoMapper;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
public class ServerRegistryService : IServerRegistryService public class ServerRegistryService : IServerRegistryService
{ {
private static readonly string[] SupportedGameNames = new[] { "Giants", "Giants Beta", "Giants Beta Dedicated", "Giants Dedicated" }; private static readonly string[] SupportedGameNames = new[] { "Giants" };
private readonly ILogger<ServerRegistryService> logger; private readonly ILogger<ServerRegistryService> logger;
private readonly IServerRegistryStore registryStore; private readonly IServerRegistryStore registryStore;
private readonly IConfiguration configuration; private readonly IConfiguration configuration;
private readonly int maxServerCount; private readonly int maxServerCount;
private readonly int maxServersPerIp;
public ServerRegistryService( public ServerRegistryService(
ILogger<ServerRegistryService> logger, ILogger<ServerRegistryService> logger,
@ -26,7 +24,6 @@
this.registryStore = registryStore; this.registryStore = registryStore;
this.configuration = configuration; this.configuration = configuration;
this.maxServerCount = Convert.ToInt32(this.configuration["MaxServerCount"]); this.maxServerCount = Convert.ToInt32(this.configuration["MaxServerCount"]);
this.maxServersPerIp = Convert.ToInt32(this.configuration["MaxServersPerIp"]);
} }
public async Task AddServer( public async Task AddServer(
@ -35,19 +32,11 @@
ArgumentUtility.CheckForNull(serverInfo, nameof(serverInfo)); ArgumentUtility.CheckForNull(serverInfo, nameof(serverInfo));
ArgumentUtility.CheckStringForNullOrEmpty(serverInfo.HostIpAddress, nameof(serverInfo.HostIpAddress)); ArgumentUtility.CheckStringForNullOrEmpty(serverInfo.HostIpAddress, nameof(serverInfo.HostIpAddress));
string gameName = serverInfo.GameName.Replace("Dedicated", string.Empty).Trim();
serverInfo.GameName = gameName;
if (!SupportedGameNames.Contains(serverInfo.GameName, StringComparer.OrdinalIgnoreCase)) if (!SupportedGameNames.Contains(serverInfo.GameName, StringComparer.OrdinalIgnoreCase))
{ {
throw new ArgumentException($"Unsupported game name {serverInfo.GameName}", nameof(serverInfo)); throw new ArgumentException($"Unsupported game name {serverInfo.GameName}", nameof(serverInfo));
} }
var existingServers = await this.registryStore.GetServerInfos(whereExpression: x => x.HostIpAddress == serverInfo.HostIpAddress);
if (existingServers.GroupBy(g => new { g.HostIpAddress }).Any(g => g.Count() > this.maxServersPerIp))
{
throw new InvalidOperationException("Exceeded maximum servers per IP.");
}
await this.registryStore.UpsertServerInfo(serverInfo); await this.registryStore.UpsertServerInfo(serverInfo);
} }
@ -57,36 +46,16 @@
.Take(this.maxServerCount); .Take(this.maxServerCount);
} }
// Old API, soon to be deprecated
public async Task DeleteServer(string ipAddress) public async Task DeleteServer(string ipAddress)
{ {
ArgumentUtility.CheckStringForNullOrEmpty(ipAddress, nameof(ipAddress)); ArgumentUtility.CheckStringForNullOrEmpty(ipAddress, nameof(ipAddress));
var serverInfos = await this.registryStore.GetServerInfos(whereExpression: x => x.HostIpAddress == ipAddress); ServerInfo serverInfo = await this.registryStore.GetServerInfo(ipAddress);
foreach (var serverInfo in serverInfos) if (serverInfo != null)
{ {
await this.registryStore.DeleteServer(serverInfo.id); await this.registryStore.DeleteServer(serverInfo.id);
} }
} }
public async Task DeleteServer(string ipAddress, string gameName, int port)
{
ArgumentUtility.CheckStringForNullOrEmpty(ipAddress, nameof(ipAddress));
ArgumentUtility.CheckStringForNullOrEmpty(gameName, nameof(gameName));
ArgumentUtility.CheckForNonnegativeInt(port, nameof(port));
var existingServerInfo = (await this.registryStore.GetServerInfos(
whereExpression:
x => x.HostIpAddress == ipAddress &&
x.Port == port &&
x.GameName.Equals(gameName, StringComparison.OrdinalIgnoreCase)))
.FirstOrDefault();
if (existingServerInfo != null)
{
await this.registryStore.DeleteServer(existingServerInfo.id);
}
}
} }
} }

View File

@ -41,11 +41,10 @@
bool includeExpired = false, bool includeExpired = false,
string partitionKey = null) string partitionKey = null)
{ {
ConcurrentDictionary<string, IList<ServerInfo>> serverInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache); ConcurrentDictionary<string, ServerInfo> serverInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache);
IQueryable<ServerInfo> serverInfoQuery = serverInfo IQueryable<ServerInfo> serverInfoQuery = serverInfo
.Values .Values
.SelectMany(s => s)
.AsQueryable(); .AsQueryable();
if (whereExpression != null) if (whereExpression != null)
@ -68,11 +67,10 @@
Expression<Func<ServerInfo, bool>> whereExpression = null, Expression<Func<ServerInfo, bool>> whereExpression = null,
string partitionKey = null) string partitionKey = null)
{ {
ConcurrentDictionary<string, IList<ServerInfo>> serverInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache); ConcurrentDictionary<string, ServerInfo> serverInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache);
IQueryable<ServerInfo> serverInfoQuery = serverInfo IQueryable<ServerInfo> serverInfoQuery = serverInfo
.Values .Values
.SelectMany(s => s)
.AsQueryable(); .AsQueryable();
if (serverInfoQuery != null) if (serverInfoQuery != null)
@ -90,55 +88,65 @@
.ToList(); .ToList();
} }
public async Task<ServerInfo> GetServerInfo(string ipAddress)
{
ArgumentUtility.CheckStringForNullOrEmpty(ipAddress, nameof(ipAddress));
ConcurrentDictionary<string, ServerInfo> serverInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache);
if (serverInfo.ContainsKey(ipAddress))
{
try
{
return serverInfo[ipAddress];
}
catch (Exception e)
{
this.logger.LogInformation("Cached server for {IPAddress} no longer found: {Exception}", ipAddress, e.ToString());
// May have been removed from the cache by another thread. Ignore and query DB instead.
}
}
return await this.client.GetItemById<ServerInfo>(ipAddress);
}
public async Task UpsertServerInfo(ServerInfo serverInfo) public async Task UpsertServerInfo(ServerInfo serverInfo)
{ {
ArgumentUtility.CheckForNull(serverInfo, nameof(serverInfo)); ArgumentUtility.CheckForNull(serverInfo, nameof(serverInfo));
// Check cache before we write to store // Check cache before we write to store
ConcurrentDictionary<string, IList<ServerInfo>> allServerInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache); ConcurrentDictionary<string, ServerInfo> allServerInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache);
if (allServerInfo.ContainsKey(serverInfo.HostIpAddress)) if (allServerInfo.ContainsKey(serverInfo.HostIpAddress))
{ {
IList<ServerInfo> serverInfoForHostIp = allServerInfo[serverInfo.HostIpAddress]; ServerInfo existingServerInfo = allServerInfo[serverInfo.HostIpAddress];
ServerInfo existingServerInfo = FindExistingServerForHostIp(serverInfoForHostIp, serverInfo);
// DDOS protection: skip write to Cosmos if parameters have not changed, // DDOS protection: skip write to Cosmos if parameters have not changed,
// or it's not been long enough. // or it's not been long enough.
if (existingServerInfo != null && Math.Abs((existingServerInfo.LastHeartbeat - serverInfo.LastHeartbeat).TotalMinutes) < ServerRefreshIntervalInMinutes) if (existingServerInfo.Equals(serverInfo)
&& Math.Abs((existingServerInfo.LastHeartbeat - serverInfo.LastHeartbeat).TotalMinutes) < ServerRefreshIntervalInMinutes)
{ {
this.logger.LogInformation("State for {IPAddress} is unchanged. Skipping write to store.", serverInfo.HostIpAddress); this.logger.LogInformation("State for {IPAddress} is unchanged. Skipping write to store.", serverInfo.HostIpAddress);
return; return;
} }
else
{
this.logger.LogInformation("State for {IPAddress} has changed. Committing update to store.", serverInfo.HostIpAddress); this.logger.LogInformation("State for {IPAddress} has changed. Committing update to store.", serverInfo.HostIpAddress);
}
}
await this.client.UpsertItem( await this.client.UpsertItem(
item: serverInfo, item: serverInfo,
partitionKey: new PartitionKey(serverInfo.DocumentType)); partitionKey: new PartitionKey(serverInfo.DocumentType));
// Update cache this.logger.LogInformation("Updating cache for request from {IPAddress}.", serverInfo.HostIpAddress);
if (existingServerInfo != null)
{
var newServerInfo = serverInfoForHostIp.Where(s => !s.Equals(serverInfo)).ToList();
newServerInfo.Add(serverInfo);
allServerInfo[serverInfo.HostIpAddress] = newServerInfo;
this.logger.LogInformation("Updating cache for request from {IPAddress} (replaced existing server).", serverInfo.HostIpAddress); if (allServerInfo.ContainsKey(serverInfo.HostIpAddress))
{
allServerInfo[serverInfo.HostIpAddress] = serverInfo;
} }
else else
{ {
allServerInfo[serverInfo.HostIpAddress].Add(serverInfo); allServerInfo.TryAdd(serverInfo.HostIpAddress, serverInfo);
this.logger.LogInformation("Updating cache for request from {IPAddress} (added new server).", serverInfo.HostIpAddress);
}
}
else
{
// Update cache
await this.client.UpsertItem(
item: serverInfo,
partitionKey: new PartitionKey(serverInfo.DocumentType));
this.logger.LogInformation("Updating cache for request from {IPAddress} (no existing servers).", serverInfo.HostIpAddress);
allServerInfo.TryAdd(serverInfo.HostIpAddress, new List<ServerInfo>() { serverInfo });
} }
} }
@ -147,21 +155,8 @@
await this.client.DeleteItem<ServerInfo>(id, partitionKey); await this.client.DeleteItem<ServerInfo>(id, partitionKey);
// Remove from cache // Remove from cache
ConcurrentDictionary<string, IList<ServerInfo>> allServerInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache); ConcurrentDictionary<string, ServerInfo> allServerInfo = await this.memoryCache.GetOrCreateAsync(CacheKeys.ServerInfo, this.PopulateCache);
if (allServerInfo.ContainsKey(id)) allServerInfo.TryRemove(id, out ServerInfo _);
{
var serverInfoCopy = allServerInfo[id].Where(s => s.id != id).ToList();
if (!serverInfoCopy.Any())
{
// No remaining servers, remove the key
allServerInfo.TryRemove(id, out IList<ServerInfo> _);
}
else
{
// Shallow-copy and replace to keep thread safety guarantee
allServerInfo[id] = serverInfoCopy;
}
}
} }
public async Task DeleteServers(IEnumerable<string> ids, string partitionKey = null) public async Task DeleteServers(IEnumerable<string> ids, string partitionKey = null)
@ -187,31 +182,15 @@
await this.client.Initialize(); await this.client.Initialize();
} }
private async Task<ConcurrentDictionary<string, IList<ServerInfo>>> PopulateCache(ICacheEntry entry) private async Task<ConcurrentDictionary<string, ServerInfo>> PopulateCache(ICacheEntry entry)
{ {
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1); entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1);
var allServerInfo = (await this.client.GetItems<ServerInfo>()); IDictionary<string, ServerInfo> serverInfo =
var serverInfoDictionary = new ConcurrentDictionary<string, IList<ServerInfo>>(); (await this.client.GetItems<ServerInfo>())
.ToDictionary(x => x.HostIpAddress, y => y);
foreach (var serverInfo in allServerInfo) return new ConcurrentDictionary<string, ServerInfo>(serverInfo);
{
if (!serverInfoDictionary.ContainsKey(serverInfo.HostIpAddress))
{
serverInfoDictionary[serverInfo.HostIpAddress] = new List<ServerInfo>() { serverInfo };
}
else
{
serverInfoDictionary[serverInfo.HostIpAddress].Add(serverInfo);
}
}
return serverInfoDictionary;
}
private static ServerInfo FindExistingServerForHostIp(IList<ServerInfo> serverInfoForHostIp, ServerInfo candidateServerInfo)
{
return serverInfoForHostIp.FirstOrDefault(s => s.Equals(candidateServerInfo));
} }
} }
} }

View File

@ -13,6 +13,8 @@
Task DeleteServers(IEnumerable<string> ids, string partitionKey = null); Task DeleteServers(IEnumerable<string> ids, string partitionKey = null);
Task<ServerInfo> GetServerInfo(string ipAddress);
Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, bool includeExpired = false, string partitionKey = null); Task<IEnumerable<ServerInfo>> GetServerInfos(Expression<Func<ServerInfo, bool>> whereExpression = null, bool includeExpired = false, string partitionKey = null);
Task<IEnumerable<TSelect>> GetServerInfos<TSelect>( Task<IEnumerable<TSelect>> GetServerInfos<TSelect>(

View File

@ -6,7 +6,6 @@
[ApiController] [ApiController]
[ApiVersion("1.0")] [ApiVersion("1.0")]
[ApiVersion("1.1")]
[Route("api/[controller]")] [Route("api/[controller]")]
public class CommunityController : ControllerBase public class CommunityController : ControllerBase
{ {

View File

@ -13,7 +13,6 @@
[ApiController] [ApiController]
[ApiVersion("1.0")] [ApiVersion("1.0")]
[ApiVersion("1.1")]
[Route("api/[controller]")] [Route("api/[controller]")]
public class CrashReportsController : ControllerBase public class CrashReportsController : ControllerBase
{ {

View File

@ -14,7 +14,6 @@ namespace Giants.Web.Controllers
{ {
[ApiController] [ApiController]
[ApiVersion("1.0")] [ApiVersion("1.0")]
[ApiVersion("1.1")]
[Route("api/[controller]")] [Route("api/[controller]")]
public class ServersController : ControllerBase public class ServersController : ControllerBase
{ {
@ -45,17 +44,6 @@ namespace Giants.Web.Controllers
await this.serverRegistryService.DeleteServer(requestIpAddress); await this.serverRegistryService.DeleteServer(requestIpAddress);
} }
[HttpDelete]
[MapToApiVersion("1.1")]
public async Task DeleteServer(string gameName, int port)
{
string requestIpAddress = this.GetRequestIpAddress();
this.logger.LogInformation("Deleting server from {IPAddress}", requestIpAddress);
await this.serverRegistryService.DeleteServer(requestIpAddress, gameName, port);
}
[HttpGet] [HttpGet]
public async Task<IEnumerable<ServerInfoWithHostAddress>> GetServers() public async Task<IEnumerable<ServerInfoWithHostAddress>> GetServers()
{ {

View File

@ -7,7 +7,6 @@ namespace Giants.WebApi.Controllers
{ {
[ApiController] [ApiController]
[ApiVersion("1.0")] [ApiVersion("1.0")]
[ApiVersion("1.1")]
[Route("api/[controller]")] [Route("api/[controller]")]
public class VersionController : ControllerBase public class VersionController : ControllerBase
{ {

View File

@ -12,7 +12,6 @@
"ServerTimeoutPeriodInMinutes": "7", "ServerTimeoutPeriodInMinutes": "7",
"ServerCleanupIntervalInMinutes": "1", "ServerCleanupIntervalInMinutes": "1",
"MaxServerCount": 1000, "MaxServerCount": 1000,
"MaxServersPerIp": 5,
"DiscordUri": "https://discord.gg/Avj4azU", "DiscordUri": "https://discord.gg/Avj4azU",
"BlobConnectionString": "", "BlobConnectionString": "",
"CrashBlobContainerName": "crashes" "CrashBlobContainerName": "crashes"

View File

@ -30,15 +30,12 @@ Global
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
DebugBeta|Any CPU = DebugBeta|Any CPU Hybrid|Any CPU = Hybrid|Any CPU
DebugBeta|x64 = DebugBeta|x64 Hybrid|x64 = Hybrid|x64
DebugBeta|x86 = DebugBeta|x86 Hybrid|x86 = Hybrid|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
ReleaseBeta|Any CPU = ReleaseBeta|Any CPU
ReleaseBeta|x64 = ReleaseBeta|x64
ReleaseBeta|x86 = ReleaseBeta|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@ -47,236 +44,180 @@ Global
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x64.Build.0 = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x64.Build.0 = Debug|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x86.ActiveCfg = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x86.ActiveCfg = Debug|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x86.Build.0 = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Debug|x86.Build.0 = Debug|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|x64.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|x64.Build.0 = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|x64.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|x86.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.DebugBeta|x86.Build.0 = Debug|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Hybrid|x86.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|Any CPU.ActiveCfg = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|Any CPU.Build.0 = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|Any CPU.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x64.ActiveCfg = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x64.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x64.Build.0 = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x64.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x86.ActiveCfg = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x86.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x86.Build.0 = Release|Any CPU {0CD61424-4E74-4A48-A726-729FEA32C50C}.Release|x86.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{0CD61424-4E74-4A48-A726-729FEA32C50C}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x64.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x64.ActiveCfg = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x64.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x64.Build.0 = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x86.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x86.ActiveCfg = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x86.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Debug|x86.Build.0 = Debug|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|x64.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|x64.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|x64.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|x86.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.DebugBeta|x86.Build.0 = Debug|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Hybrid|x86.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|Any CPU.ActiveCfg = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|Any CPU.Build.0 = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|Any CPU.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x64.ActiveCfg = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x64.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x64.Build.0 = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x64.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x86.ActiveCfg = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x86.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x86.Build.0 = Release|Any CPU {D426FE47-231B-41F0-AC78-293D12EF66A0}.Release|x86.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{D426FE47-231B-41F0-AC78-293D12EF66A0}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|Any CPU.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x64.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x64.ActiveCfg = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x64.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x64.Build.0 = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x86.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x86.ActiveCfg = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x86.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Debug|x86.Build.0 = Debug|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|x64.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|x64.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|x64.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|x86.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.DebugBeta|x86.Build.0 = Debug|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Hybrid|x86.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|Any CPU.ActiveCfg = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|Any CPU.Build.0 = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|Any CPU.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x64.ActiveCfg = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x64.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x64.Build.0 = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x64.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x86.ActiveCfg = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x86.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x86.Build.0 = Release|Any CPU {9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.Release|x86.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{9A284C34-8F4B-4E20-B74B-1A0AF04EDBD1}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x64.ActiveCfg = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x64.ActiveCfg = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x64.Build.0 = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x64.Build.0 = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x86.ActiveCfg = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x86.ActiveCfg = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x86.Build.0 = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Debug|x86.Build.0 = Debug|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|Any CPU.ActiveCfg = DebugBeta|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|Any CPU.Build.0 = DebugBeta|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|x64.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|x64.Build.0 = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|x64.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|x86.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.DebugBeta|x86.Build.0 = Debug|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Hybrid|x86.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|Any CPU.Build.0 = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|Any CPU.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x64.ActiveCfg = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x64.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x64.Build.0 = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x64.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x86.ActiveCfg = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x86.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x86.Build.0 = Release|Any CPU {612FD606-F072-4A04-9054-65BC592E9D3E}.Release|x86.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|Any CPU.ActiveCfg = ReleaseBeta|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|Any CPU.Build.0 = ReleaseBeta|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{612FD606-F072-4A04-9054-65BC592E9D3E}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|Any CPU.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x64.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x64.ActiveCfg = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x64.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x64.Build.0 = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x86.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x86.ActiveCfg = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x86.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Debug|x86.Build.0 = Debug|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|x64.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|x64.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|x64.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|x86.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.DebugBeta|x86.Build.0 = Debug|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Hybrid|x86.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|Any CPU.ActiveCfg = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|Any CPU.Build.0 = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|Any CPU.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x64.ActiveCfg = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x64.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x64.Build.0 = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x64.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.ActiveCfg = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.Build.0 = Release|Any CPU {D4C21170-82D4-4D1F-81EC-036835AC1238}.Release|x86.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{D4C21170-82D4-4D1F-81EC-036835AC1238}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.ActiveCfg = Debug|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|Any CPU.Build.0 = Debug|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x64.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x64.ActiveCfg = Debug|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x64.Build.0 = Debug|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.ActiveCfg = Debug|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Debug|x86.Build.0 = Debug|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.DebugBeta|Any CPU.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|Any CPU.ActiveCfg = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.DebugBeta|Any CPU.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|Any CPU.Build.0 = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.DebugBeta|x64.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|x64.ActiveCfg = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.DebugBeta|x86.ActiveCfg = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|x64.Build.0 = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.DebugBeta|x86.Build.0 = Debug|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|x86.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Hybrid|x86.Build.0 = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.ActiveCfg = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.Build.0 = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|Any CPU.Build.0 = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x64.ActiveCfg = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x64.ActiveCfg = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x64.Build.0 = Release|x64
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x86.ActiveCfg = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x86.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x86.Build.0 = Release|Win32 {9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.Release|x86.Build.0 = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.ReleaseBeta|Any CPU.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.ReleaseBeta|Any CPU.Build.0 = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.ReleaseBeta|x64.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.ReleaseBeta|x86.ActiveCfg = Release|Win32
{9A0AF60B-3C3B-45B7-B5E1-4C9997A68EBB}.ReleaseBeta|x86.Build.0 = Release|Win32
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x64.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x64.ActiveCfg = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x64.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x64.Build.0 = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x86.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x86.ActiveCfg = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x86.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Debug|x86.Build.0 = Debug|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|x64.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|x64.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|x64.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|x86.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.DebugBeta|x86.Build.0 = Debug|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Hybrid|x86.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|Any CPU.Build.0 = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|Any CPU.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x64.ActiveCfg = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x64.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x64.Build.0 = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x64.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x86.ActiveCfg = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x86.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x86.Build.0 = Release|Any CPU {6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.Release|x86.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{6286A2C7-15F0-4D87-B928-4B012F9E0FFE}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|Any CPU.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x64.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x64.ActiveCfg = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x64.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x64.Build.0 = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x86.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x86.ActiveCfg = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x86.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Debug|x86.Build.0 = Debug|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|x64.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|x64.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|x64.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|x86.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.DebugBeta|x86.Build.0 = Debug|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Hybrid|x86.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|Any CPU.ActiveCfg = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|Any CPU.Build.0 = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|Any CPU.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x64.ActiveCfg = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x64.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x64.Build.0 = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x64.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x86.ActiveCfg = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x86.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x86.Build.0 = Release|Any CPU {F5F3D216-9787-4CFF-88DF-8259CF667F88}.Release|x86.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{F5F3D216-9787-4CFF-88DF-8259CF667F88}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|Any CPU.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x64.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x64.ActiveCfg = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x64.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x64.Build.0 = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x86.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x86.ActiveCfg = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x86.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Debug|x86.Build.0 = Debug|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|Any CPU.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|Any CPU.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|Any CPU.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|Any CPU.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|x64.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|x64.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|x64.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|x64.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|x86.ActiveCfg = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|x86.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.DebugBeta|x86.Build.0 = Debug|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Hybrid|x86.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|Any CPU.ActiveCfg = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|Any CPU.Build.0 = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|Any CPU.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x64.ActiveCfg = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x64.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x64.Build.0 = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x64.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x86.ActiveCfg = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x86.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x86.Build.0 = Release|Any CPU {49423BA5-4A9F-47A3-9D2D-E83936272DD0}.Release|x86.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|Any CPU.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|Any CPU.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|x64.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|x64.Build.0 = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|x86.ActiveCfg = Release|Any CPU
{49423BA5-4A9F-47A3-9D2D-E83936272DD0}.ReleaseBeta|x86.Build.0 = Release|Any CPU
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|Any CPU.ActiveCfg = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|Any CPU.ActiveCfg = Debug|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|Any CPU.Build.0 = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|Any CPU.Build.0 = Debug|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x64.ActiveCfg = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x64.ActiveCfg = Debug|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x64.Build.0 = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x64.Build.0 = Debug|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x86.ActiveCfg = Debug|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x86.ActiveCfg = Debug|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x86.Build.0 = Debug|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Debug|x86.Build.0 = Debug|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|Any CPU.ActiveCfg = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|Any CPU.ActiveCfg = Hybrid|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|Any CPU.Build.0 = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|Any CPU.Build.0 = Hybrid|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|x64.ActiveCfg = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|x64.ActiveCfg = Hybrid|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|x64.Build.0 = Debug|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|x64.Build.0 = Hybrid|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|x86.ActiveCfg = Debug|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|x86.ActiveCfg = Hybrid|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.DebugBeta|x86.Build.0 = Debug|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Hybrid|x86.Build.0 = Hybrid|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|Any CPU.ActiveCfg = Release|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|Any CPU.ActiveCfg = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|Any CPU.Build.0 = Release|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|Any CPU.Build.0 = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x64.ActiveCfg = Release|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x64.ActiveCfg = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x64.Build.0 = Release|x64 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x64.Build.0 = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x86.ActiveCfg = Release|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x86.ActiveCfg = Release|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x86.Build.0 = Release|Win32 {448F061E-AE05-4E06-84A1-C95660FD048C}.Release|x86.Build.0 = Release|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|Any CPU.ActiveCfg = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|Any CPU.Build.0 = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|x64.ActiveCfg = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|x64.Build.0 = Release|x64
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|x86.ActiveCfg = Release|Win32
{448F061E-AE05-4E06-84A1-C95660FD048C}.ReleaseBeta|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -19,7 +19,6 @@
<RootNamespace>GiantsExp</RootNamespace> <RootNamespace>GiantsExp</RootNamespace>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<ProjectName>imp_gbs</ProjectName> <ProjectName>imp_gbs</ProjectName>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
@ -75,7 +74,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs> <CompileAs>Default</CompileAs>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpplatest</LanguageStandard>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles> <ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
@ -111,7 +110,7 @@
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs> <CompileAs>Default</CompileAs>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpplatest</LanguageStandard>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles> <ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>
@ -143,7 +142,7 @@
<PrecompiledHeader>Use</PrecompiledHeader> <PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<LanguageStandard>stdcpp17</LanguageStandard> <LanguageStandard>stdcpplatest</LanguageStandard>
<ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles> <ForcedIncludeFiles>stdafx.h</ForcedIncludeFiles>
</ClCompile> </ClCompile>
<ResourceCompile> <ResourceCompile>

View File

@ -9,6 +9,14 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion> <VCProjectVersion>15.0</VCProjectVersion>
@ -25,6 +33,16 @@
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
</ImportGroup> </ImportGroup>
@ -36,6 +54,12 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup /> <PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@ -45,9 +69,6 @@
<EntryPointName /> <EntryPointName />
<AdditionalOptions>/Gec %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/Gec %(AdditionalOptions)</AdditionalOptions>
</FxCompile> </FxCompile>
<PostBuildEvent>
<Command>copy /Y "$(ProjectDir)fxo\*.fxo" "$(GIANTS_PATH)\Bin\Shaders"</Command>
</PostBuildEvent>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<FxCompile> <FxCompile>
@ -56,9 +77,6 @@
<EntryPointName /> <EntryPointName />
<AdditionalOptions>/Gec %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/Gec %(AdditionalOptions)</AdditionalOptions>
</FxCompile> </FxCompile>
<PostBuildEvent>
<Command>copy /Y "$(ProjectDir)fxo\*.fxo" "$(GIANTS_PATH)\Bin\Shaders"</Command>
</PostBuildEvent>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<CustomBuild Include="fx\LandBump.fx"> <CustomBuild Include="fx\LandBump.fx">
@ -70,8 +88,8 @@
</CustomBuild> </CustomBuild>
<CustomBuild Include="fx\Ocean.fx"> <CustomBuild Include="fx\Ocean.fx">
<FileType>Document</FileType> <FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo /Fc fxo\%(Filename).txt</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo /Fc fxo\%(Filename).txt</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxo\%(Filename).fxo</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxo\%(Filename).fxo</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fxo\%(Filename).fxo</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fxo\%(Filename).fxo</Outputs>
</CustomBuild> </CustomBuild>
@ -94,17 +112,6 @@
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command>
</CustomBuild> </CustomBuild>
</ItemGroup> </ItemGroup>
<ItemGroup>
<FxCompile Include="fx\FixedFuncEMU.fx">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(JUN10SDKUTILPATH)\fxc.exe" /LD /Zi /Tfx_2_0 %(FullPath) /Fo fxo\%(Filename).fxo</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">fxo\%(Filename).fxo</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">fxo\%(Filename).fxo</Outputs>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</FxCompile>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>