Skip to content

Commit

Permalink
Release 4.0.2.
Browse files Browse the repository at this point in the history
  • Loading branch information
WorldlineConnect committed Apr 19, 2024
1 parent 9a106f7 commit dd337b4
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<PropertyGroup>
<TargetFrameworks>net45;netstandard2.0;netstandard2.1</TargetFrameworks>
<RootNamespace>Worldline.Connect.Sdk</RootNamespace>
<AssemblyVersion>4.0.1</AssemblyVersion>
<Version>4.0.1</Version>
<AssemblyVersion>4.0.2</AssemblyVersion>
<Version>4.0.2</Version>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Company>Worldline Global Collect</Company>
<Product>Worldline Connect .NET SDK examples</Product>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<PropertyGroup>
<TargetFrameworks>net45;netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
<RootNamespace>Worldline.Connect.Sdk</RootNamespace>
<AssemblyVersion>4.0.1</AssemblyVersion>
<Version>4.0.1</Version>
<AssemblyVersion>4.0.2</AssemblyVersion>
<Version>4.0.2</Version>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Company>Worldline Global Collect</Company>
<Product>Worldline Connect .NET SDK integration tests</Product>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<PropertyGroup>
<TargetFrameworks>net45;netstandard2.0;netstandard2.1</TargetFrameworks>
<RootNamespace>Worldline.Connect.Sdk</RootNamespace>
<AssemblyVersion>4.0.1</AssemblyVersion>
<Version>4.0.1</Version>
<AssemblyVersion>4.0.2</AssemblyVersion>
<Version>4.0.2</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Company>Worldline Global Collect</Company>
<Product>Worldline Connect .NET SDK</Product>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<PropertyGroup>
<TargetFrameworks>net45;netcoreapp2.1;netcoreapp3.1</TargetFrameworks>
<RootNamespace>Worldline.Connect.Sdk</RootNamespace>
<AssemblyVersion>4.0.1</AssemblyVersion>
<Version>4.0.1</Version>
<AssemblyVersion>4.0.2</AssemblyVersion>
<Version>4.0.2</Version>
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
<Company>Worldline Global Collect</Company>
<Product>Worldline Connect .NET SDK unit tests</Product>
Expand Down
62 changes: 46 additions & 16 deletions Worldline.Connect.Sdk/Communication/DefaultConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,37 @@ public DefaultConnection(TimeSpan? socketTimeout, int maxConnections = 2, Proxy
httpClient.Timeout = socketTimeout.Value;
}

// Always return the same HttpClient instance
// Always return the same HttpClient instance. Don't close it after each request but only when Dispose() is called
_httpClientProvider = () => httpClient;
_postRequestAction = client => { };
_disposeAction = httpClient.Dispose;
}

/// <summary>
/// Creates a new <c>DefaultConnection</c> with a custom provider for <see cref="HttpClient"/> instances to use for each request.
/// This could be based on <c>IHttpClientFactor</c> or something completely different.
/// <p>This constructor will dispose provided <c>HttpClient</c> instances after each request.</p>
/// </summary>
/// <param name="httpClientProvider">The custom provider for <c>HttpClient</c> instances</param>
/// <param name="disposeAction">An optional action to call from the <c>Dispose</c> method</param>
/// <seealso cref="DefaultConnection(Func{HttpClient}, Action{HttpClient}, Action)"/>
public DefaultConnection(Func<HttpClient> httpClientProvider, Action disposeAction = null)
: this(httpClientProvider, client => client.Dispose(), disposeAction)
{

}

/// <summary>
/// Creates a new <c>DefaultConnection</c> with a custom provider for <see cref="HttpClient"/> instances to use for each request.
/// This could be based on <c>IHttpClientFactor</c> or something completely different.
/// </summary>
/// <param name="httpClientProvider">The custom provider for <c>HttpClient</c> instances</param>
/// <param name="postRequestAction">A mandatory action to call after each request, e.g. to dispose provided <c>HttpClient</c> instances</param>
/// <param name="disposeAction">An optional action to call from the <c>Dispose</c> method</param>
public DefaultConnection(Func<HttpClient> httpClientProvider, Action<HttpClient> postRequestAction, Action disposeAction = null)
{
_httpClientProvider = httpClientProvider ?? throw new ArgumentException("httpClientProvider is required");
_postRequestAction = postRequestAction ?? throw new ArgumentException("postRequestAction is required");
_disposeAction = disposeAction ?? (() => { });
}

Expand Down Expand Up @@ -114,26 +131,38 @@ private async Task<T> SendHttpMessage<T>(HttpMethod method, Uri uri, IEnumerable
message.Headers.Add(a.Name, a.Value);
}
}

var startTime = DateTime.Now;

LogRequest(guid, message, content, contentString);

var httpClient = _httpClientProvider();
var httpResponseTask = httpClient.SendAsync(message);
try
{
using (var httpResponse = await httpClient.SendAsync(message).ConfigureAwait(false))
{
var headers = from header in httpResponse.Headers
from value in header.Value
select new ResponseHeader(header.Key, value);

var responseBodyTask = httpResponse.Content?.ReadAsStreamAsync() ?? Task.FromResult<Stream>(new MemoryStream());
var responseBody = await responseBodyTask.ConfigureAwait(false);

using (var httpResponse = await httpResponseTask.ConfigureAwait(false))
var endTime = DateTime.Now;
var duration = endTime - startTime;

responseBody = LogResponse(guid, httpResponse, httpResponse.Content?.Headers, responseBody, duration);

var responseBodyHeaders = from header in httpResponse.Content?.Headers
from value in header.Value
select new EntityHeader(header.Key, value);

return responseHandler(httpResponse.StatusCode, responseBody, headers.Cast<IResponseHeader>().Union(responseBodyHeaders));
}
}
finally
{
var responseBodyTask = httpResponse.Content?.ReadAsStreamAsync() ?? Task.FromResult<Stream>(new MemoryStream());
var headers = from header in httpResponse.Headers
from value in header.Value
select new ResponseHeader(header.Key, value);

var responseBody = await responseBodyTask.ConfigureAwait(false);
var endTime = DateTime.Now;
var duration = endTime - startTime;
responseBody = LogResponse(guid, httpResponse, httpResponse.Content?.Headers, responseBody, duration);
var responseBodyHeaders = from header in httpResponse.Content?.Headers
from aValue in header.Value
select new EntityHeader(header.Key, aValue);
return responseHandler(httpResponse.StatusCode, responseBody, headers.Cast<IResponseHeader>().Union(responseBodyHeaders));
_postRequestAction(httpClient);
}
}
}
Expand Down Expand Up @@ -322,6 +351,7 @@ private static bool IsBinaryContent(string contentType)
#endregion

private readonly Func<HttpClient> _httpClientProvider;
private readonly Action<HttpClient> _postRequestAction;
private readonly Action _disposeAction;

private BodyObfuscator _bodyObfuscator = BodyObfuscator.DefaultObfuscator;
Expand Down
2 changes: 1 addition & 1 deletion Worldline.Connect.Sdk/Communication/MetadataProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ internal class ServerMetaInfo
.Append(Environment.Version)
.ToString();

private const string SdkVersion = "4.0.1";
private const string SdkVersion = "4.0.2";

private const string ServerMetaInfoHeader = "X-GCS-ServerMetaInfo";

Expand Down
4 changes: 2 additions & 2 deletions Worldline.Connect.Sdk/Worldline.Connect.Sdk.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
<PropertyGroup>
<TargetFrameworks>net45;netstandard2.0;netstandard2.1</TargetFrameworks>
<RootNamespace>Worldline.Connect.Sdk</RootNamespace>
<AssemblyVersion>4.0.1</AssemblyVersion>
<Version>4.0.1</Version>
<AssemblyVersion>4.0.2</AssemblyVersion>
<Version>4.0.2</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Company>Worldline Global Collect</Company>
<Product>Worldline Connect .NET SDK</Product>
Expand Down

0 comments on commit dd337b4

Please sign in to comment.