Skip to content

Commit

Permalink
Merge branch 'ServerTypeSelection' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Triky313 committed Mar 22, 2023
2 parents 79dc617 + a761824 commit 965aa0c
Show file tree
Hide file tree
Showing 14 changed files with 159 additions and 85 deletions.
9 changes: 0 additions & 9 deletions src/StatisticsAnalysisTool/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -242,15 +242,6 @@
<setting name="DiscordUrl" serializeAs="String">
<value>https://discord.com/invite/sahSrSPmaJ</value>
</setting>
<setting name="CityPricesApiUrlDefault" serializeAs="String">
<value>https://www.albion-online-data.com/api/v2/stats/prices/</value>
</setting>
<setting name="CityPricesHistoryApiUrlDefault" serializeAs="String">
<value>https://www.albion-online-data.com/api/v2/stats/history/</value>
</setting>
<setting name="GoldStatsApiUrlDefault" serializeAs="String">
<value>https://www.albion-online-data.com/api/v2/stats/Gold</value>
</setting>
<setting name="GameFilesDirectoryName" serializeAs="String">
<value>GameFiles</value>
</setting>
Expand Down
28 changes: 21 additions & 7 deletions src/StatisticsAnalysisTool/Common/ApiController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
using StatisticsAnalysisTool.Properties;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Text.Json;
using System.Threading.Tasks;
using StatisticsAnalysisTool.Network;

namespace StatisticsAnalysisTool.Common;

Expand Down Expand Up @@ -41,13 +43,13 @@ public static async Task<List<MarketResponse>> GetCityItemPricesFromJsonAsync(st
return new List<MarketResponse>();
}

var url = SettingsController.CurrentSettings.CityPricesApiUrl ?? Settings.Default.CityPricesApiUrlDefault;
var url = Path.Combine(GetServerBaseUrlByCurrentServer(), "stats/prices/");
url += uniqueName;

if (marketLocations?.Count >= 1)
{
url += "?locations=";
url = marketLocations.Aggregate(url, (current, location) => current + $"{(int)location},");
url = marketLocations.Aggregate(url, (current, location) => current + $"{(int) location},");
}

if (qualities?.Count >= 1)
Expand All @@ -65,7 +67,7 @@ public static async Task<List<MarketResponse>> GetCityItemPricesFromJsonAsync(st

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
using var response = await client.GetAsync(url);
if (response.StatusCode == (HttpStatusCode)429)
if (response.StatusCode == (HttpStatusCode) 429)
{
throw new TooManyRequestsException();
}
Expand Down Expand Up @@ -93,12 +95,12 @@ public static async Task<List<MarketHistoriesResponse>> GetHistoryItemPricesFrom

if (locations?.Count > 0)
{
locationsString = string.Join(",", locations.Select(x => ((int)x).ToString()));
locationsString = string.Join(",", locations.Select(x => ((int) x).ToString()));
}

var qualitiesString = quality.ToString();

var url = SettingsController.CurrentSettings.CityPricesHistoryApiUrl ?? Settings.Default.CityPricesHistoryApiUrlDefault;
var url = Path.Combine(GetServerBaseUrlByCurrentServer(), "stats/history/");
url += uniqueName;
url += $"?locations={locationsString}";
url += $"&date={date:M-d-yy}";
Expand All @@ -115,7 +117,7 @@ public static async Task<List<MarketHistoriesResponse>> GetHistoryItemPricesFrom
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
using var response = await client.GetAsync(url);
using var content = response.Content;
if (response.StatusCode == (HttpStatusCode)429)
if (response.StatusCode == (HttpStatusCode) 429)
{
throw new TooManyRequestsException();
}
Expand Down Expand Up @@ -326,7 +328,9 @@ public static async Task<List<GameInfoPlayerKillsDeaths>> GetGameInfoPlayerSoloK
public static async Task<List<GoldResponseModel>> GetGoldPricesFromJsonAsync(DateTime? dateTime, int count, int timeout = 300)
{
var dateString = dateTime != null ? $"{dateTime:yyyy-MM-dd'T'HH:mm:ss}" : string.Empty;
var url = $"{SettingsController.CurrentSettings.GoldStatsApiUrl ?? Settings.Default.GoldStatsApiUrlDefault}?date={dateString}&count={count}";

var url = Path.Combine(GetServerBaseUrlByCurrentServer(), "stats/Gold/");
url += $"?date={dateString}&count={count}";

using var clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (_, _, _, _) => true;
Expand Down Expand Up @@ -553,5 +557,15 @@ private static MarketResponse MergeMarketAndPortalPrices(List<MarketResponse> li

#endregion

private static string GetServerBaseUrlByCurrentServer()
{
return NetworkManager.AlbionServer switch
{
AlbionServer.West => SettingsController.CurrentSettings.AlbionDataProjectBaseUrlWest,
AlbionServer.East => SettingsController.CurrentSettings.AlbionDataProjectBaseUrlEast,
_ => SettingsController.CurrentSettings.AlbionDataProjectBaseUrlWest
};
}

#endregion
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ public class SettingsObject
public bool IsOpenItemWindowInNewWindowChecked { get; set; } = true;
public bool IsInfoWindowShownOnStart { get; set; } = true;
public string SelectedAlertSound { get; set; }
public string CityPricesApiUrl { get; set; } = "https://www.albion-online-data.com/api/v2/stats/prices/";
public string CityPricesHistoryApiUrl { get; set; } = "https://www.albion-online-data.com/api/v2/stats/history/";
public string GoldStatsApiUrl { get; set; } = "https://www.albion-online-data.com/api/v2/stats/Gold";
public string AlbionDataProjectBaseUrlWest { get; set; } = "https://albion-online-data.com/api/v2/";
public string AlbionDataProjectBaseUrlEast { get; set; } = "https://east.albion-online-data.com/api/v2/";
public double MainWindowHeight { get; set; } = 100;
public double MainWindowWidth { get; set; } = 100;
public bool MainWindowMaximized { get; set; }
Expand Down
8 changes: 8 additions & 0 deletions src/StatisticsAnalysisTool/Enumerations/AlbionServer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace StatisticsAnalysisTool.Enumerations;

public enum AlbionServer
{
Unknown,
West,
East
}
6 changes: 6 additions & 0 deletions src/StatisticsAnalysisTool/Languages/de-DE.xml
Original file line number Diff line number Diff line change
Expand Up @@ -700,4 +700,10 @@
<translation name="RESOURCE_VALUE">Ressourcenwert</translation>
<translation name="TOTAL_MARKET_VALUE">Gesammter Marktwert</translation>
<translation name="NAVIGATION_TAB_VISIBILITY">Navigation Tab Sichtbarkeit</translation>
<translation name="SERVER">Server</translation>
<translation name="UNKNOWN_SERVER">Unbekannter Server</translation>
<translation name="WEST_SERVER">West Server</translation>
<translation name="EAST_SERVER">Ost Server</translation>
<translation name="ALBION_DATA_PROJECT_BASE_URL_WEST">Albion data project base url WEST</translation>
<translation name="ALBION_DATA_PROJECT_BASE_URL_EAST">Albion data project base url OST</translation>
</translations>
6 changes: 6 additions & 0 deletions src/StatisticsAnalysisTool/Languages/en-US.xml
Original file line number Diff line number Diff line change
Expand Up @@ -700,4 +700,10 @@
<translation name="RESOURCE_VALUE">Resource value</translation>
<translation name="TOTAL_MARKET_VALUE">Total market value</translation>
<translation name="NAVIGATION_TAB_VISIBILITY">Navigation tab visibility</translation>
<translation name="SERVER">Server</translation>
<translation name="UNKNOWN_SERVER">Unknown Server</translation>
<translation name="WEST_SERVER">West Server</translation>
<translation name="EAST_SERVER">East Server</translation>
<translation name="ALBION_DATA_PROJECT_BASE_URL_WEST">Albion data project base url WEST</translation>
<translation name="ALBION_DATA_PROJECT_BASE_URL_EAST">Albion data project base url EAST</translation>
</translations>
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ public class SettingsWindowTranslation
public static string OpenToolDirectory => LanguageController.Translation("OPEN_TOOL_DIRECTORY");
public static string OpenDebugConsole => LanguageController.Translation("OPEN_DEBUG_CONSOLE");
public static string CreateDesktopShortcut => LanguageController.Translation("CREATE_DESKTOP_SHORTCUT");
public static string CityPricesApiUrl => LanguageController.Translation("CITY_PRICES_API_URL");
public static string CityPricesHistoryApiUrl => LanguageController.Translation("CITY_PRICES_HISTORY_API_URL");
public static string AlbionDataProjectBaseUrlWest => LanguageController.Translation("ALBION_DATA_PROJECT_BASE_URL_WEST");
public static string AlbionDataProjectBaseUrlEast => LanguageController.Translation("ALBION_DATA_PROJECT_BASE_URL_EAST");
public static string GoldStatsApiUrl => LanguageController.Translation("GOLD_STATS_API_URL");
public static string IsLootLoggerSaveReminderActive => LanguageController.Translation("IS_LOOT_LOGGER_SAVE_REMINDER_ACTIVE");
public static string ExportLootLoggingFileWithRealItemName => LanguageController.Translation("EXPORT_LOOT_LOGGING_FILE_WITH_REAL_ITEM_NAME");
Expand Down
87 changes: 83 additions & 4 deletions src/StatisticsAnalysisTool/Network/NetworkManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
using PacketDotNet;
using SharpPcap;
using StatisticsAnalysisTool.Common;
using StatisticsAnalysisTool.Enumerations;
using StatisticsAnalysisTool.Network.Handler;
using StatisticsAnalysisTool.Network.Manager;
using StatisticsAnalysisTool.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;

namespace StatisticsAnalysisTool.Network;
Expand All @@ -18,9 +20,13 @@ public class NetworkManager
private static IPhotonReceiver _receiver;
private static readonly List<ICaptureDevice> CapturedDevices = new();
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod()?.DeclaringType);
private static DateTime _lastGetCurrentServerByIpTime = DateTime.MinValue;
private static int _serverEventCounter;
private static AlbionServer _lastServerType;

public static AlbionServer AlbionServer { get; private set; } = AlbionServer.Unknown;
public static bool IsNetworkCaptureRunning => CapturedDevices.Where(device => device.Started).Any(device => device.Started);

public static bool StartNetworkCapture(TrackingController trackingController)
{
ReceiverBuilder builder = ReceiverBuilder.Create();
Expand Down Expand Up @@ -82,7 +88,7 @@ public static bool StartNetworkCapture(TrackingController trackingController)
builder.AddResponseHandler(new AuctionGetResponseHandler(trackingController));

_receiver = builder.Build();

try
{
CapturedDevices.AddRange(CaptureDeviceList.Instance);
Expand All @@ -107,7 +113,7 @@ public static bool StartNetworkCapture(TrackingController trackingController)
return false;
}
}

private static bool StartDeviceCapture()
{
if (CapturedDevices.Count <= 0)
Expand Down Expand Up @@ -137,7 +143,7 @@ private static bool StartDeviceCapture()
{
Log.Error(MethodBase.GetCurrentMethod()?.DeclaringType + " - MainWindowViewModel is null.");
}

return false;
}

Expand Down Expand Up @@ -173,6 +179,14 @@ private static void Device_OnPacketArrival(object sender, PacketCapture e)
{
try
{
var server = GetCurrentServerByIp(e);
_ = UpdateMainWindowServerTypeAsync(server);
AlbionServer = server;
if (server == AlbionServer.Unknown)
{
return;
}

var packet = Packet.ParsePacket(e.GetPacket().LinkLayerType, e.GetPacket().Data).Extract<UdpPacket>();
if (packet != null && (packet.SourcePort == 5056 || packet.DestinationPort == 5056))
{
Expand Down Expand Up @@ -201,4 +215,69 @@ private static void Device_OnPacketArrival(object sender, PacketCapture e)
Log.Error(nameof(Device_OnPacketArrival), ex);
}
}

private static AlbionServer GetCurrentServerByIp(PacketCapture e)
{
var packet = Packet.ParsePacket(e.GetPacket().LinkLayerType, e.GetPacket().Data);
var ipPacket = packet.Extract<IPPacket>();
var srcIp = ipPacket?.SourceAddress?.ToString();
var albionServer = AlbionServer.Unknown;

if (srcIp == null || string.IsNullOrEmpty(srcIp))
{
albionServer = AlbionServer.Unknown;
}
else if (srcIp.Contains("5.188.125."))
{
albionServer = AlbionServer.West;
}
else if (srcIp!.Contains("5.45.187."))
{
albionServer = AlbionServer.East;
}

return GetActiveAlbionServer(albionServer);
}

private static AlbionServer GetActiveAlbionServer(AlbionServer albionServer)
{
if (albionServer != AlbionServer.Unknown && _lastServerType == albionServer)
{
_serverEventCounter++;
}
else if (albionServer != AlbionServer.Unknown)
{
_serverEventCounter = 1;
_lastServerType = albionServer;
}

if (_serverEventCounter < 20 || albionServer == AlbionServer.Unknown)
{
return _lastServerType;
}

_serverEventCounter = 20;
return albionServer;
}

private static async Task UpdateMainWindowServerTypeAsync(AlbionServer albionServer)
{
if ((DateTime.Now - _lastGetCurrentServerByIpTime).TotalSeconds < 10)
{
return;
}

await Task.Run(() =>
{
var mainWindowViewModel = ServiceLocator.Resolve<MainWindowViewModel>();
mainWindowViewModel.ServerTypeText = albionServer switch
{
AlbionServer.East => LanguageController.Translation("EAST_SERVER"),
AlbionServer.West => LanguageController.Translation("WEST_SERVER"),
_ => LanguageController.Translation("UNKNOWN_SERVER")
};
});

_lastGetCurrentServerByIpTime = DateTime.Now;
}
}
27 changes: 0 additions & 27 deletions src/StatisticsAnalysisTool/Properties/Settings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 0 additions & 9 deletions src/StatisticsAnalysisTool/Properties/Settings.settings
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,6 @@
<Setting Name="FavoriteItemsFileName" Type="System.String" Scope="User">
<Value Profile="(Default)">FavoriteItems.json</Value>
</Setting>
<Setting Name="CityPricesApiUrlDefault" Type="System.String" Scope="Application">
<Value Profile="(Default)">https://www.albion-online-data.com/api/v2/stats/prices/</Value>
</Setting>
<Setting Name="CityPricesHistoryApiUrlDefault" Type="System.String" Scope="Application">
<Value Profile="(Default)">https://www.albion-online-data.com/api/v2/stats/history/</Value>
</Setting>
<Setting Name="GoldStatsApiUrlDefault" Type="System.String" Scope="Application">
<Value Profile="(Default)">https://www.albion-online-data.com/api/v2/stats/Gold</Value>
</Setting>
<Setting Name="GameFilesDirectoryName" Type="System.String" Scope="Application">
<Value Profile="(Default)">GameFiles</Value>
</Setting>
Expand Down
12 changes: 4 additions & 8 deletions src/StatisticsAnalysisTool/UserControls/SettingsControl.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -108,17 +108,13 @@
VerticalAlignment="Bottom" Click="OpenDebugConsole_Click" />
</DockPanel>
<DockPanel Margin="0,5,0,0">
<Label Content="{Binding Translation.CityPricesApiUrl, FallbackValue=CITY__PRICES__API__URL}" MinWidth="300" VerticalAlignment="Top" />
<TextBox Text="{Binding CityPricesApiUrl}" Height="40" TextWrapping="Wrap" VerticalAlignment="Top" Margin="0,0,5,0" />
<Label Content="{Binding Translation.AlbionDataProjectBaseUrlWest, FallbackValue=ALBION_DATA_PROJECT_BASE_URL_WEST}" MinWidth="300" VerticalAlignment="Top" />
<TextBox Text="{Binding AlbionDataProjectBaseUrlWest}" Height="40" TextWrapping="Wrap" VerticalAlignment="Top" Margin="0,0,5,0" />
</DockPanel>
<DockPanel Margin="0,5,0,0">
<Label Content="{Binding Translation.CityPricesHistoryApiUrl, FallbackValue=CITY__PRICES__HISTORY__API__URL}" MinWidth="300" VerticalAlignment="Top" />
<TextBox Text="{Binding CityPricesHistoryApiUrl}" Height="40" TextWrapping="Wrap" VerticalAlignment="Top" Margin="0,0,5,0" />
<Label Content="{Binding Translation.AlbionDataProjectBaseUrlEast, FallbackValue=ALBION_DATA_PROJECT_BASE_URL_EAST}" MinWidth="300" VerticalAlignment="Top" />
<TextBox Text="{Binding AlbionDataProjectBaseUrlEast}" Height="40" TextWrapping="Wrap" VerticalAlignment="Top" Margin="0,0,5,0" />
</DockPanel>
<!--<DockPanel Margin="0,5,0,0">
<Label Content="{Binding Translation.GoldStatsApiUrl, FallbackValue=GOLD__STATS__API__URL}" MinWidth="300" VerticalAlignment="Top" />
<TextBox Text="{Binding GoldStatsApiUrl}" Height="40" TextWrapping="Wrap" VerticalAlignment="Top" Margin="0,0,5,0" />
</DockPanel>-->

<DockPanel Margin="0,5,0,0">
<Label Content="{Binding Translation.IsLootLoggerSaveReminderActive, FallbackValue=IS__LOOT__LOGGER__SAVE__REMINDER__ACTIVE}" MinWidth="300" VerticalAlignment="Top" />
Expand Down
Loading

0 comments on commit 965aa0c

Please sign in to comment.