fixes and polly

This commit is contained in:
Michele 2020-11-09 00:20:50 +00:00
parent 92f333a4c4
commit d61f46d07a
3 changed files with 34 additions and 5 deletions

View file

@ -16,6 +16,12 @@ using System.Collections.Concurrent;
using Sledgemapper.Shared.Entities;
using Refit;
using System.Net.Http;
using Polly.Retry;
using Polly.Timeout;
using Polly;
using Polly.Extensions.Http;
using System.Threading.Tasks;
using System.Net;
namespace Sledgemapper
{
@ -29,6 +35,8 @@ namespace Sledgemapper
private Overlay _selectedOverlay = new Overlay { X = 1, Y = 1 };
private int _tileSize = 30;
private HubConnection connection;
private AsyncRetryPolicy<HttpResponseMessage> retryPolicy;
private AsyncTimeoutPolicy<HttpResponseMessage> timeoutPolicy;
private readonly Desktop _desktop;
private string _currentTileId = "";
private string _currentWallId = "";
@ -53,6 +61,8 @@ namespace Sledgemapper
IsFixedTimeStep = false;
}
protected override void Initialize()
{
// TODO: Add your initialization logic here
@ -67,6 +77,14 @@ namespace Sledgemapper
// .WithUrl("http://hub.michelescandura.com:5000/SledgemapperHub")
.Build();
retryPolicy = HttpPolicyExtensions
.HandleTransientHttpError()
.Or<TimeoutRejectedException>() // Thrown by Polly's TimeoutPolicy if the inner call gets timeout.
.WaitAndRetryAsync(2, _ => TimeSpan.FromMilliseconds(500));
timeoutPolicy = Policy
.TimeoutAsync<HttpResponseMessage>(TimeSpan.FromMilliseconds(500));
var httpClientHandler = new HttpClientHandler();
//if (myConfigurationService.VerifySslCertificate == false)
@ -80,6 +98,7 @@ namespace Sledgemapper
{
BaseAddress = new Uri("http://localhost:5000")
}
);
connection.On<SessionData>("UpdateMap", (map) =>
@ -330,8 +349,8 @@ namespace Sledgemapper
window.Closed += (s, a) =>
{
// Called when window is closed
};
// Called when window is closed
};
window.ShowModal(_desktop);
}
@ -909,10 +928,18 @@ namespace Sledgemapper
_selectedOverlay.Intersection = false;
}
private void OnOverlayAdded(object sender, OverlayAddedEventArgs e)
private async Task Execute(Func<Task> call)
{
_api.NewOverlay(e.Overlay, _session);
await Policy
.Handle<ApiException>(ex => ex.StatusCode == HttpStatusCode.RequestTimeout)
.RetryAsync(5, async (exception, retryCount) => await Task.Delay(500))
.ExecuteAsync(async () => await call().ConfigureAwait(false))
.ConfigureAwait(false);
}
private async void OnOverlayAdded(object sender, OverlayAddedEventArgs e)
{
await Execute(() => _api.NewOverlay(e.Overlay, _session));
}
private void OnTileAdded(object sender, TileAddedEventArgs e)
{