Browse Source

Added a couple of buckets, fixed logging out

tags/1.0-rc
RogueException 9 years ago
parent
commit
50392d3688
4 changed files with 20 additions and 5 deletions
  1. +16
    -5
      src/Discord.Net/API/DiscordAPIClient.cs
  2. +1
    -0
      src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs
  3. +1
    -0
      src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs
  4. +2
    -0
      src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs

+ 16
- 5
src/Discord.Net/API/DiscordAPIClient.cs View File

@@ -23,7 +23,7 @@ namespace Discord.API
private readonly RequestQueue _requestQueue; private readonly RequestQueue _requestQueue;
private readonly JsonSerializer _serializer; private readonly JsonSerializer _serializer;
private IRestClient _restClient;
private readonly IRestClient _restClient;
private CancellationToken _cancelToken; private CancellationToken _cancelToken;


public TokenType AuthTokenType { get; private set; } public TokenType AuthTokenType { get; private set; }
@@ -68,15 +68,26 @@ namespace Discord.API
} }
public async Task Login(LoginParams args, CancellationToken cancelToken) public async Task Login(LoginParams args, CancellationToken cancelToken)
{ {
var response = await Send<LoginResponse>("POST", "auth/login", args).ConfigureAwait(false);

AuthTokenType = TokenType.User; AuthTokenType = TokenType.User;
_restClient.SetHeader("authorization", null);
_cancelToken = cancelToken;

LoginResponse response;
try
{
response = await Send<LoginResponse>("POST", "auth/login", args, GlobalBucket.Login).ConfigureAwait(false);
}
catch
{
_cancelToken = CancellationToken.None;
throw;
}

_restClient.SetHeader("authorization", response.Token); _restClient.SetHeader("authorization", response.Token);
} }
public async Task Logout() public async Task Logout()
{ {
await _requestQueue.Clear().ConfigureAwait(false); await _requestQueue.Clear().ConfigureAwait(false);
_restClient = null;
} }


//Core //Core
@@ -527,7 +538,7 @@ namespace Discord.API
Preconditions.NotEqual(userId, 0, nameof(userId)); Preconditions.NotEqual(userId, 0, nameof(userId));
Preconditions.NotNull(args, nameof(args)); Preconditions.NotNull(args, nameof(args));


await Send("PATCH", $"guilds/{guildId}/members/{userId}", args).ConfigureAwait(false);
await Send("PATCH", $"guilds/{guildId}/members/{userId}", args, GuildBucket.ModifyMember, guildId).ConfigureAwait(false);
} }


//Guild Roles //Guild Roles


+ 1
- 0
src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs View File

@@ -3,6 +3,7 @@
public enum GlobalBucket public enum GlobalBucket
{ {
General, General,
Login,
DirectMessage DirectMessage
} }
} }

+ 1
- 0
src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs View File

@@ -5,6 +5,7 @@
SendEditMessage, SendEditMessage,
DeleteMessage, DeleteMessage,
DeleteMessages, DeleteMessages,
ModifyMember,
Nickname Nickname
} }
} }

+ 2
- 0
src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs View File

@@ -64,6 +64,7 @@ namespace Discord.Net.Rest
{ {
//Globals //Globals
case GlobalBucket.General: return new RequestQueueBucket(this, bucket, int.MaxValue, 0); //Catch-all case GlobalBucket.General: return new RequestQueueBucket(this, bucket, int.MaxValue, 0); //Catch-all
case GlobalBucket.Login: return new RequestQueueBucket(this, bucket, 1, 1); //TODO: Is this actual logins or token validations too?
case GlobalBucket.DirectMessage: return new RequestQueueBucket(this, bucket, 5, 5); case GlobalBucket.DirectMessage: return new RequestQueueBucket(this, bucket, 5, 5);


default: throw new ArgumentException($"Unknown global bucket: {bucket}", nameof(bucket)); default: throw new ArgumentException($"Unknown global bucket: {bucket}", nameof(bucket));
@@ -77,6 +78,7 @@ namespace Discord.Net.Rest
case GuildBucket.SendEditMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 5); case GuildBucket.SendEditMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 5);
case GuildBucket.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 1); case GuildBucket.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 1);
case GuildBucket.DeleteMessages: return new RequestQueueBucket(this, bucket, guildId, 1, 1); case GuildBucket.DeleteMessages: return new RequestQueueBucket(this, bucket, guildId, 1, 1);
case GuildBucket.ModifyMember: return new RequestQueueBucket(this, bucket, guildId, 10, 10); //TODO: Is this all users or just roles?
case GuildBucket.Nickname: return new RequestQueueBucket(this, bucket, guildId, 1, 1); case GuildBucket.Nickname: return new RequestQueueBucket(this, bucket, guildId, 1, 1);


default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket)); default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket));


Loading…
Cancel
Save