Browse Source

Added ILogger, made logger optional for RestClients

tags/docs-0.9
RogueException 9 years ago
parent
commit
937ff71c4a
8 changed files with 79 additions and 28 deletions
  1. +3
    -0
      src/Discord.Net.Net45/Discord.Net.csproj
  2. +44
    -0
      src/Discord.Net/Logging/ILogger.cs
  3. +1
    -1
      src/Discord.Net/Logging/Logger.cs
  4. +12
    -9
      src/Discord.Net/Net/Rest/BuiltInEngine.cs
  5. +1
    -1
      src/Discord.Net/Net/Rest/ETFRestClient.cs
  6. +1
    -1
      src/Discord.Net/Net/Rest/JsonRestClient.cs
  7. +5
    -6
      src/Discord.Net/Net/Rest/RestClient.cs
  8. +12
    -10
      src/Discord.Net/Net/Rest/SharpRestEngine.cs

+ 3
- 0
src/Discord.Net.Net45/Discord.Net.csproj View File

@@ -487,6 +487,9 @@
<Compile Include="..\Discord.Net\Legacy.cs">
<Link>Legacy.cs</Link>
</Compile>
<Compile Include="..\Discord.Net\Logging\ILogger.cs">
<Link>Logging\ILogger.cs</Link>
</Compile>
<Compile Include="..\Discord.Net\Logging\Logger.cs">
<Link>Logging\Logger.cs</Link>
</Compile>


+ 44
- 0
src/Discord.Net/Logging/ILogger.cs View File

@@ -0,0 +1,44 @@
using System;

namespace Discord.Logging
{
public interface ILogger
{
LogSeverity Level { get; }

void Log(LogSeverity severity, string message, Exception exception = null);
#if !NET45
void Log(LogSeverity severity, FormattableString message, Exception exception = null);
#endif

void Error(string message, Exception exception = null);
#if !NET45
void Error(FormattableString message, Exception exception = null);
#endif
void Error(Exception exception);

void Warning(string message, Exception exception = null);
#if !NET45
void Warning(FormattableString message, Exception exception = null);
#endif
void Warning(Exception exception);

void Info(string message, Exception exception = null);
#if !NET45
void Info(FormattableString message, Exception exception = null);
#endif
void Info(Exception exception);

void Verbose(string message, Exception exception = null);
#if !NET45
void Verbose(FormattableString message, Exception exception = null);
#endif
void Verbose(Exception exception);

void Debug(string message, Exception exception = null);
#if !NET45
void Debug(FormattableString message, Exception exception = null);
#endif
void Debug(Exception exception);
}
}

+ 1
- 1
src/Discord.Net/Logging/Logger.cs View File

@@ -2,7 +2,7 @@

namespace Discord.Logging
{
public class Logger
public class Logger : ILogger
{
private readonly LogManager _manager;



+ 12
- 9
src/Discord.Net/Net/Rest/BuiltInEngine.cs View File

@@ -22,15 +22,15 @@ namespace Discord.Net.Rest
private readonly string _baseUrl;

private readonly AsyncLock _rateLimitLock;
private readonly ILogger _logger;
private DateTime _rateLimitTime;

internal Logger Logger { get; }

public BuiltInEngine(DiscordConfig config, string baseUrl, Logger logger)
public BuiltInEngine(DiscordConfig config, string baseUrl, ILogger logger)
{
_config = config;
_baseUrl = baseUrl;
Logger = logger;
_logger = logger;

_rateLimitLock = new AsyncLock();
_client = new HttpClient(new HttpClientHandler
@@ -100,15 +100,18 @@ namespace Discord.Net.Rest
int milliseconds;
if (retryAfter != null && int.TryParse(retryAfter, out milliseconds))
{
var now = DateTime.UtcNow;
if (now >= _rateLimitTime)
if (_logger != null)
{
using (await _rateLimitLock.LockAsync().ConfigureAwait(false))
var now = DateTime.UtcNow;
if (now >= _rateLimitTime)
{
if (now >= _rateLimitTime)
using (await _rateLimitLock.LockAsync().ConfigureAwait(false))
{
_rateLimitTime = now.AddMilliseconds(milliseconds);
Logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds");
if (now >= _rateLimitTime)
{
_rateLimitTime = now.AddMilliseconds(milliseconds);
_logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds");
}
}
}
}


+ 1
- 1
src/Discord.Net/Net/Rest/ETFRestClient.cs View File

@@ -9,7 +9,7 @@ namespace Discord.Net.Rest
{
private readonly ETFWriter _serializer;

public ETFRestClient(DiscordConfig config, string baseUrl, Logger logger)
public ETFRestClient(DiscordConfig config, string baseUrl, ILogger logger = null)
: base(config, baseUrl, logger)
{
_serializer = new ETFWriter(new MemoryStream());


+ 1
- 1
src/Discord.Net/Net/Rest/JsonRestClient.cs View File

@@ -8,7 +8,7 @@ namespace Discord.Net.Rest
{
private JsonSerializer _serializer;

public JsonRestClient(DiscordConfig config, string baseUrl, Logger logger)
public JsonRestClient(DiscordConfig config, string baseUrl, ILogger logger = null)
: base(config, baseUrl, logger)
{
_serializer = new JsonSerializer();


+ 5
- 6
src/Discord.Net/Net/Rest/RestClient.cs View File

@@ -38,10 +38,9 @@ namespace Discord.Net.Rest
private readonly DiscordConfig _config;
private readonly IRestEngine _engine;
private readonly ETFWriter _serializer;
private readonly ILogger _logger;
private string _token;

internal Logger Logger { get; }

public CancellationToken CancelToken { get; set; }

public string Token
@@ -54,10 +53,10 @@ namespace Discord.Net.Rest
}
}

protected RestClient(DiscordConfig config, string baseUrl, Logger logger)
protected RestClient(DiscordConfig config, string baseUrl, ILogger logger = null)
{
_config = config;
Logger = logger;
_logger = logger;

#if !DOTNET5_4
_engine = new RestSharpEngine(config, baseUrl, logger);
@@ -65,7 +64,7 @@ namespace Discord.Net.Rest
_engine = new BuiltInEngine(config, baseUrl, logger);
#endif

if (Logger.Level >= LogSeverity.Verbose)
if (_logger != null && _logger.Level >= LogSeverity.Verbose)
{
this.SentRequest += (s, e) =>
{
@@ -82,7 +81,7 @@ namespace Discord.Net.Rest
log += $" {e.ResponseJson}";
}
}
Logger.Verbose(log);
_logger.Verbose(log);
};
}
}


+ 12
- 10
src/Discord.Net/Net/Rest/SharpRestEngine.cs View File

@@ -19,14 +19,13 @@ namespace Discord.Net.Rest
private readonly RestSharpClient _client;

private readonly AsyncLock _rateLimitLock;
private readonly ILogger _logger;
private DateTime _rateLimitTime;

internal Logger Logger { get; }

public RestSharpEngine(DiscordConfig config, string baseUrl, Logger logger)
public RestSharpEngine(DiscordConfig config, string baseUrl, ILogger logger)
{
_config = config;
Logger = logger;
_logger = logger;

_rateLimitLock = new AsyncLock();
_client = new RestSharpClient(baseUrl)
@@ -89,15 +88,18 @@ namespace Discord.Net.Rest
int milliseconds;
if (retryAfter != null && int.TryParse((string)retryAfter.Value, out milliseconds))
{
var now = DateTime.UtcNow;
if (now >= _rateLimitTime)
if (_logger != null)
{
using (await _rateLimitLock.LockAsync().ConfigureAwait(false))
var now = DateTime.UtcNow;
if (now >= _rateLimitTime)
{
if (now >= _rateLimitTime)
using (await _rateLimitLock.LockAsync().ConfigureAwait(false))
{
_rateLimitTime = now.AddMilliseconds(milliseconds);
Logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds");
if (now >= _rateLimitTime)
{
_rateLimitTime = now.AddMilliseconds(milliseconds);
_logger.Warning($"Rate limit hit, waiting {Math.Round(milliseconds / 1000.0f, 2)} seconds");
}
}
}
}


Loading…
Cancel
Save