Added a couple of buckets, fixed logging out

This commit is contained in:
RogueException
2016-05-23 02:22:51 -03:00
parent af680b7f43
commit 50392d3688
4 changed files with 20 additions and 5 deletions

View File

@@ -23,7 +23,7 @@ namespace Discord.API
private readonly RequestQueue _requestQueue;
private readonly JsonSerializer _serializer;
private IRestClient _restClient;
private readonly IRestClient _restClient;
private CancellationToken _cancelToken;
public TokenType AuthTokenType { get; private set; }
@@ -68,15 +68,26 @@ namespace Discord.API
}
public async Task Login(LoginParams args, CancellationToken cancelToken)
{
var response = await Send<LoginResponse>("POST", "auth/login", args).ConfigureAwait(false);
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);
}
public async Task Logout()
{
await _requestQueue.Clear().ConfigureAwait(false);
_restClient = null;
}
//Core
@@ -527,7 +538,7 @@ namespace Discord.API
Preconditions.NotEqual(userId, 0, nameof(userId));
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

View File

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

View File

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

View File

@@ -64,6 +64,7 @@ namespace Discord.Net.Rest
{
//Globals
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);
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.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 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);
default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket));