forked from loafle/openapi-generator-original
removed a using statement (#20541)
This commit is contained in:
parent
8b52b0afe3
commit
187af2ec4e
@ -7,7 +7,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace {{packageName}}.{{clientPackage}}
|
namespace {{packageName}}.{{clientPackage}}
|
||||||
{
|
{
|
||||||
@ -17,7 +16,7 @@ namespace {{packageName}}.{{clientPackage}}
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
{{>visibility}} class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
{{>visibility}} class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new{{^net70OrLater}} Dictionary<string, Channel<TTokenBase>>{{/net70OrLater}}();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new{{^net70OrLater}} Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>{{/net70OrLater}}();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -29,12 +28,12 @@ namespace {{packageName}}.{{clientPackage}}
|
|||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
{{#lambda.copy}}
|
{{#lambda.copy}}
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
{{/lambda.copy}}
|
{{/lambda.copy}}
|
||||||
{{#hasApiKeyMethods}}
|
{{#hasApiKeyMethods}}
|
||||||
if (container is TokenContainer<ApiKeyToken> apiKeyTokenContainer)
|
if (container is TokenContainer<ApiKeyToken> apiKeyTokenContainer)
|
||||||
@ -43,12 +42,12 @@ namespace {{packageName}}.{{clientPackage}}
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -64,14 +63,14 @@ namespace {{packageName}}.{{clientPackage}}
|
|||||||
{{/lambda.paste}}
|
{{/lambda.paste}}
|
||||||
{{/hasApiKeyMethods}}
|
{{/hasApiKeyMethods}}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default{{^netstandard20OrLater}}(global::System.Threading.CancellationToken){{/netstandard20OrLater}})
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default{{^netstandard20OrLater}}(global::System.Threading.CancellationToken){{/netstandard20OrLater}})
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>{{nrt?}} tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>{{nrt?}} tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -24,7 +23,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -41,32 +40,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -32,21 +31,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -40,32 +39,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -40,32 +39,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -40,32 +39,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -40,32 +39,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -23,7 +22,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -34,21 +33,21 @@ namespace Org.OpenAPITools.Client
|
|||||||
foreach(TTokenBase token in _tokens)
|
foreach(TTokenBase token in _tokens)
|
||||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||||
|
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase>? tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Channels;
|
|
||||||
|
|
||||||
namespace Org.OpenAPITools.Client
|
namespace Org.OpenAPITools.Client
|
||||||
{
|
{
|
||||||
@ -21,7 +20,7 @@ namespace Org.OpenAPITools.Client
|
|||||||
/// <typeparam name="TTokenBase"></typeparam>
|
/// <typeparam name="TTokenBase"></typeparam>
|
||||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||||
{
|
{
|
||||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, Channel<TTokenBase>>();
|
internal Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>> AvailableTokens { get; } = new Dictionary<string, global::System.Threading.Channels.Channel<TTokenBase>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||||
@ -38,32 +37,32 @@ namespace Org.OpenAPITools.Client
|
|||||||
|
|
||||||
foreach (string header in headers)
|
foreach (string header in headers)
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(header, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
global::System.Threading.Channels.BoundedChannelOptions options = new global::System.Threading.Channels.BoundedChannelOptions(_tokens.Length)
|
||||||
{
|
{
|
||||||
FullMode = BoundedChannelFullMode.DropWrite
|
FullMode = global::System.Threading.Channels.BoundedChannelFullMode.DropWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
AvailableTokens.Add(string.Empty, global::System.Threading.Channels.Channel.CreateBounded<TTokenBase>(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
foreach(global::System.Threading.Channels.Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||||
for (int i = 0; i < _tokens.Length; i++)
|
for (int i = 0; i < _tokens.Length; i++)
|
||||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||||
{
|
{
|
||||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase> tokens))
|
if (!AvailableTokens.TryGetValue(header, out global::System.Threading.Channels.Channel<TTokenBase> tokens))
|
||||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||||
|
|
||||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user