diff --git a/SevenDays.Core/Helpers/Logger.cs b/SevenDays.Core/Helpers/Logger.cs new file mode 100644 index 0000000..0716f26 --- /dev/null +++ b/SevenDays.Core/Helpers/Logger.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SevenDays.Core.Interfaces; + +namespace SevenDays.Core.Helpers +{ + public class Logger : ILogger + { + public void LogException(Exception exception) + { + Xamarin.Insights.Report(exception); + } + + public void Track(string trackIdentifier) + { + Xamarin.Insights.Track(trackIdentifier); + } + } +} diff --git a/SevenDays.Core/Interfaces/ILogger.cs b/SevenDays.Core/Interfaces/ILogger.cs new file mode 100644 index 0000000..7707439 --- /dev/null +++ b/SevenDays.Core/Interfaces/ILogger.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SevenDays.Core.Interfaces +{ + public interface ILogger + { + void LogException(Exception exception); + void Track(string trackIdentifier); + } +} diff --git a/SevenDays.Core/Services/SevendayService.cs b/SevenDays.Core/Services/SevendayService.cs index a82dd95..8751da3 100644 --- a/SevenDays.Core/Services/SevendayService.cs +++ b/SevenDays.Core/Services/SevendayService.cs @@ -23,11 +23,13 @@ public class SevendayService : ISevendayService private readonly INetworkService networkService; private readonly ICacheService cache; private readonly ISettings settings; + private readonly ILogger logger; public SevendayService() { networkService = Ioc.Container.Resolve(); cache = Ioc.Container.Resolve(); settings = Ioc.Container.Resolve(); + logger = Ioc.Container.Resolve(); } private async Task getApiUrlAsync(string api) @@ -46,19 +48,19 @@ private async Task getApiUrlAsync(string api) return await cache.GetObject(serverKey); } - public async Task CanConnectToServer(string host, string port) + public Task CanConnectToServer(string host, string port) { - return await networkService.CanConnectToService(string.Format("http://{0}", host), port); + return networkService.CanConnectToService(string.Format("http://{0}", host), port); } - public async Task CanConnectToServer(SevenDays.Model.Entity.Server server) + public Task CanConnectToServer(SevenDays.Model.Entity.Server server) { if (server == null) - return false; + return Task.FromResult(false); if (string.IsNullOrEmpty(server.Host) || string.IsNullOrEmpty(server.Port)) - return false; + return Task.FromResult(false); - return await CanConnectToServer(server.Host, server.Port); + return CanConnectToServer(server.Host, server.Port); } public async Task CanConnectToServer() @@ -98,10 +100,23 @@ public async Task> GetPlayersLocation() string url = await getApiUrlAsync(ApiConstants.Seven.PlayerLocation); - using (var client = new HttpClient(new NativeMessageHandler())) + try { - var result = await client.GetStringAsync(url); - response.Result = JsonConvert.DeserializeObject>(result); + using (var client = new HttpClient(new NativeMessageHandler())) + { + var result = await client.GetStringAsync(url); + response.Result = JsonConvert.DeserializeObject>(result); + } + } + /* + System.Net.WebExceptionStatus.ReceiveFailure = 3 + Azure throws this error. However this enum doesn't exist in the namespace. + */ + catch (System.Net.WebException ex) when ((int)ex.Status == 3) + { + if ((int) ex.Status != 3) + throw; + logger.LogException(ex); } return response; diff --git a/SevenDays.Core/SevenDays.Core.csproj b/SevenDays.Core/SevenDays.Core.csproj index ff66acf..e777000 100644 --- a/SevenDays.Core/SevenDays.Core.csproj +++ b/SevenDays.Core/SevenDays.Core.csproj @@ -49,9 +49,11 @@ + + diff --git a/SevenDays.Shared/IoC.cs b/SevenDays.Shared/IoC.cs index 38e581f..440ade7 100644 --- a/SevenDays.Shared/IoC.cs +++ b/SevenDays.Shared/IoC.cs @@ -17,6 +17,7 @@ public static void Init() Container.Register(() => new SevendayService()); Container.Register(() => new Settings()); Container.Register(() => new AkavacheCacheService()); + Container.Register(() => new Logger()); } } } diff --git a/SevenDays.Tests/SevenDays.Tests.Shared/LoggerMock.cs b/SevenDays.Tests/SevenDays.Tests.Shared/LoggerMock.cs new file mode 100644 index 0000000..0c537f7 --- /dev/null +++ b/SevenDays.Tests/SevenDays.Tests.Shared/LoggerMock.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; +using SevenDays.Core.Interfaces; + +namespace SevenDays.Tests.Shared +{ + public class LoggerMock : ILogger + { + public void LogException(Exception exception) + { + if (exception != null) + { + System.Diagnostics.Debug.WriteLine(exception.Message); + while (exception.InnerException != null) + { + exception = exception.InnerException; + System.Diagnostics.Debug.WriteLine(exception.Message); + } + } + } + + public void Track(string trackIdentifier) + { + System.Diagnostics.Debug.WriteLine($"Tracked: {trackIdentifier}"); + } + } +} diff --git a/SevenDays.Tests/SevenDays.Tests.Shared/SevenDays.Tests.Shared.projitems b/SevenDays.Tests/SevenDays.Tests.Shared/SevenDays.Tests.Shared.projitems index e3a0468..6aa97f9 100644 --- a/SevenDays.Tests/SevenDays.Tests.Shared/SevenDays.Tests.Shared.projitems +++ b/SevenDays.Tests/SevenDays.Tests.Shared/SevenDays.Tests.Shared.projitems @@ -10,6 +10,7 @@ + diff --git a/SevenDays.Tests/SevenDays.Tests.Shared/SevendayServiceTests.cs b/SevenDays.Tests/SevenDays.Tests.Shared/SevendayServiceTests.cs index cf51797..01275b9 100644 --- a/SevenDays.Tests/SevenDays.Tests.Shared/SevendayServiceTests.cs +++ b/SevenDays.Tests/SevenDays.Tests.Shared/SevendayServiceTests.cs @@ -10,7 +10,6 @@ using SevenDays.Model.Base; using SevenDays.Model.Seven; using Xunit; -//using Settings = SevenDays.Core.Helpers.Settings; namespace SevenDays.Tests.Shared { @@ -22,6 +21,7 @@ public SevendayServiceTests() Container.Register(() => new NetworkServiceMock()); Container.Register(() => new CacheServiceMock()); Container.Register(() => new SettingsMock()); + Container.Register(() => new LoggerMock()); Container.Register(() => new SevendayService()); }