Skip to content

Commit 8939f7c

Browse files
committed
add lock to fix threading
1 parent d29577c commit 8939f7c

File tree

4 files changed

+68
-35
lines changed

4 files changed

+68
-35
lines changed

Source/FikaAmazonAPI.SampleCode/FeedsSample.cs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,35 +101,54 @@ public void SubmitFeedInventory()
101101
// var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_DATA);
102102

103103
//}
104-
public void SubmitFeedPRICING()
104+
public async void SubmitFeedPRICING(double PRICE, string SKU)
105105
{
106106

107107
ConstructFeedService createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
108108

109109
var list = new List<PriceMessage>();
110110
list.Add(new PriceMessage()
111111
{
112-
SKU = "8201031206122...",
112+
SKU = SKU,
113113
StandardPrice = new StandardPrice()
114114
{
115115
currency = BaseCurrencyCode.AED.ToString(),
116-
Value = (201.0522M).ToString("0.00")
116+
Value = (PRICE).ToString("0.00")
117117
}
118118
});
119119
createDocument.AddPriceMessage(list);
120120

121121
var xml = createDocument.GetXML();
122122

123-
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_PRICING_DATA);
123+
var feedID = await amazonConnection.Feed.SubmitFeedAsync(xml, FeedType.POST_PRODUCT_PRICING_DATA);
124124

125-
var feedOutput = amazonConnection.Feed.GetFeed(feedID);
125+
string ResultFeedDocumentId = string.Empty;
126+
while (string.IsNullOrEmpty(ResultFeedDocumentId))
127+
{
128+
var feedOutput = await amazonConnection.Feed.GetFeedAsync(feedID);
129+
if (feedOutput.ProcessingStatus == AmazonSpApiSDK.Models.Feeds.Feed.ProcessingStatusEnum.DONE)
130+
{
131+
var outPut = await amazonConnection.Feed.GetFeedDocumentAsync(feedOutput.ResultFeedDocumentId);
126132

127-
var outPut = amazonConnection.Feed.GetFeedDocument(feedOutput.ResultFeedDocumentId);
133+
var reportOutput = outPut.Url;
134+
135+
var processingReport = await amazonConnection.Feed.GetFeedDocumentProcessingReportAsync(reportOutput);
136+
137+
Console.WriteLine("MessagesProcessed=" + processingReport.ProcessingSummary.MessagesProcessed);
138+
Console.WriteLine("MessagesSuccessful= " + processingReport.ProcessingSummary.MessagesSuccessful);
139+
Console.WriteLine("MessagesWithError=" + processingReport.ProcessingSummary.MessagesWithError);
140+
Console.WriteLine("MessagesWithWarning=" + processingReport.ProcessingSummary.MessagesWithWarning);
141+
Console.WriteLine("ResultDescription=" + processingReport.Result.FirstOrDefault()?.ResultDescription);
142+
}
143+
144+
if (!(feedOutput.ProcessingStatus == AmazonSpApiSDK.Models.Feeds.Feed.ProcessingStatusEnum.INPROGRESS ||
145+
feedOutput.ProcessingStatus == AmazonSpApiSDK.Models.Feeds.Feed.ProcessingStatusEnum.INQUEUE))
146+
break;
147+
else Thread.Sleep(10000);
148+
}
128149

129-
var reportOutput = outPut.Url;
130150

131151

132-
var processingReport = amazonConnection.Feed.GetFeedDocumentProcessingReport(reportOutput);
133152
}
134153

135154
public void FeebPostOrderFullfillment()

Source/FikaAmazonAPI/AmazonSpApiSDK/Runtime/AWSSignerHelper.cs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -177,17 +177,20 @@ public virtual string BuildStringToSign(DateTime signingDate, string hashedCanon
177177
/// <returns>Date and time used for x-amz-date, in UTC</returns>
178178
public virtual DateTime InitializeHeaders(IRestRequest restRequest, string host)
179179
{
180-
restRequest.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
181-
&& parameter.Name == XAmzDateHeaderName);
182-
restRequest.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
183-
&& parameter.Name == HostHeaderName);
180+
lock (restRequest)
181+
{
182+
restRequest.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
183+
&& parameter.Name == XAmzDateHeaderName);
184+
restRequest.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
185+
&& parameter.Name == HostHeaderName);
184186

185-
DateTime signingDate = DateHelper.GetUtcNow();
187+
DateTime signingDate = DateHelper.GetUtcNow();
186188

187-
restRequest.AddOrUpdateHeader(XAmzDateHeaderName, signingDate.ToString(ISO8601BasicDateTimeFormat, CultureInfo.InvariantCulture));
188-
restRequest.AddOrUpdateHeader(HostHeaderName, host);
189+
restRequest.AddOrUpdateHeader(XAmzDateHeaderName, signingDate.ToString(ISO8601BasicDateTimeFormat, CultureInfo.InvariantCulture));
190+
restRequest.AddOrUpdateHeader(HostHeaderName, host);
189191

190-
return signingDate;
192+
return signingDate;
193+
}
191194
}
192195

193196
/// <summary>
@@ -230,14 +233,18 @@ public virtual void AddSignature(IRestRequest restRequest,
230233
string region,
231234
DateTime signingDate)
232235
{
233-
string scope = BuildScope(signingDate, region);
234-
StringBuilder authorizationHeaderValueBuilder = new StringBuilder();
235-
authorizationHeaderValueBuilder.AppendFormat("{0}-{1}", Scheme, Algorithm);
236-
authorizationHeaderValueBuilder.AppendFormat(" {0}={1}/{2},", CredentialSubHeaderName, accessKeyId, scope);
237-
authorizationHeaderValueBuilder.AppendFormat(" {0}={1},", SignedHeadersSubHeaderName, signedHeaders);
238-
authorizationHeaderValueBuilder.AppendFormat(" {0}={1}", SignatureSubHeaderName, signature);
236+
lock (restRequest)
237+
{
238+
string scope = BuildScope(signingDate, region);
239+
StringBuilder authorizationHeaderValueBuilder = new StringBuilder();
240+
authorizationHeaderValueBuilder.AppendFormat("{0}-{1}", Scheme, Algorithm);
241+
authorizationHeaderValueBuilder.AppendFormat(" {0}={1}/{2},", CredentialSubHeaderName, accessKeyId, scope);
242+
authorizationHeaderValueBuilder.AppendFormat(" {0}={1},", SignedHeadersSubHeaderName, signedHeaders);
243+
authorizationHeaderValueBuilder.AppendFormat(" {0}={1}", SignatureSubHeaderName, signature);
244+
245+
restRequest.AddOrUpdateHeader(AuthorizationHeaderName, authorizationHeaderValueBuilder.ToString());
246+
}
239247

240-
restRequest.AddOrUpdateHeader(AuthorizationHeaderName, authorizationHeaderValueBuilder.ToString());
241248
}
242249

243250
private static string BuildScope(DateTime signingDate, string region)

Source/FikaAmazonAPI/Services/RequestService.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,17 @@ private void SaveLastRequestHeader(IList<RestSharp.Parameter> parameters)
129129
}
130130
private void RestHeader()
131131
{
132-
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
133-
&& parameter.Name == AWSSignerHelper.XAmzDateHeaderName);
134-
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
135-
&& parameter.Name == AWSSignerHelper.AuthorizationHeaderName);
136-
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
137-
&& parameter.Name == AccessTokenHeaderName);
138-
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
139-
&& parameter.Name == SecurityTokenHeaderName);
132+
lock (Request)
133+
{
134+
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
135+
&& parameter.Name == AWSSignerHelper.XAmzDateHeaderName);
136+
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
137+
&& parameter.Name == AWSSignerHelper.AuthorizationHeaderName);
138+
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
139+
&& parameter.Name == AccessTokenHeaderName);
140+
Request.Parameters.RemoveAll(parameter => ParameterType.HttpHeader.Equals(parameter.Type)
141+
&& parameter.Name == SecurityTokenHeaderName);
142+
}
140143
}
141144

142145
//public T ExecuteRequest<T>(RateLimitType rateLimitType = RateLimitType.UNSET) where T : new()
@@ -272,7 +275,10 @@ protected void AddJsonBody(object jsonData)
272275
}
273276
protected void AddAccessToken()
274277
{
275-
Request.AddOrUpdateHeader(AccessTokenHeaderName, AccessToken);
278+
lock (Request)
279+
{
280+
Request.AddOrUpdateHeader(AccessTokenHeaderName, AccessToken);
281+
}
276282
}
277283

278284
protected async void RefreshToken(TokenDataType tokenDataType = TokenDataType.Normal, CreateRestrictedDataTokenRequest requestPII = null)

Source/FikaAmazonAPI/Services/TokenGeneration.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,10 @@ public static async Task<IRestRequest> SignWithSTSKeysAndSecurityTokenAsync(IRes
9999
dataToken = amazonCredential.GetAWSAuthenticationTokenData();
100100
}
101101

102-
103-
restRequest.AddOrUpdateHeader(RequestService.SecurityTokenHeaderName, dataToken.SessionToken);
104-
102+
lock (restRequest)
103+
{
104+
restRequest.AddOrUpdateHeader(RequestService.SecurityTokenHeaderName, dataToken.SessionToken);
105+
}
105106
return new AWSSigV4Signer(dataToken.AWSAuthenticationCredential)
106107
.Sign(restRequest, host);
107108

0 commit comments

Comments
 (0)