Browse Source

Added option to cancel an outgoing REST request in the SendingRequest event

tags/docs-0.9
RogueException 9 years ago
parent
commit
46b854bd12
2 changed files with 11 additions and 6 deletions
  1. +1
    -0
      src/Discord.Net/Net/Rest/RequestEventArgs.cs
  2. +10
    -6
      src/Discord.Net/Net/Rest/RestClient.cs

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

@@ -6,6 +6,7 @@ namespace Discord.Net.Rest
public class RequestEventArgs : EventArgs public class RequestEventArgs : EventArgs
{ {
public IRestRequest Request { get; set; } public IRestRequest Request { get; set; }
public bool Cancel { get; set; }


public RequestEventArgs(IRestRequest request) public RequestEventArgs(IRestRequest request)
{ {


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

@@ -26,8 +26,12 @@ namespace Discord.Net.Rest
public event EventHandler<RequestEventArgs> SendingRequest = delegate { }; public event EventHandler<RequestEventArgs> SendingRequest = delegate { };
public event EventHandler<CompletedRequestEventArgs> SentRequest = delegate { }; public event EventHandler<CompletedRequestEventArgs> SentRequest = delegate { };


private void OnSendingRequest(IRestRequest request)
=> SendingRequest(this, new RequestEventArgs(request));
private bool OnSendingRequest(IRestRequest request)
{
var eventArgs = new RequestEventArgs(request);
SendingRequest(this, eventArgs);
return !eventArgs.Cancel;
}
private void OnSentRequest(IRestRequest request, object response, string responseJson, double milliseconds) private void OnSentRequest(IRestRequest request, object response, string responseJson, double milliseconds)
=> SentRequest(this, new CompletedRequestEventArgs(request, response, responseJson, milliseconds)); => SentRequest(this, new CompletedRequestEventArgs(request, response, responseJson, milliseconds));


@@ -88,7 +92,7 @@ namespace Discord.Net.Rest
{ {
if (request == null) throw new ArgumentNullException(nameof(request)); if (request == null) throw new ArgumentNullException(nameof(request));


OnSendingRequest(request);
if (!OnSendingRequest(request)) throw new OperationCanceledException();
var results = await Send(request, true).ConfigureAwait(false); var results = await Send(request, true).ConfigureAwait(false);
var response = Deserialize<ResponseT>(results.Response); var response = Deserialize<ResponseT>(results.Response);
OnSentRequest(request, response, results.Response, results.Milliseconds); OnSentRequest(request, response, results.Response, results.Milliseconds);
@@ -99,7 +103,7 @@ namespace Discord.Net.Rest
{ {
if (request == null) throw new ArgumentNullException(nameof(request)); if (request == null) throw new ArgumentNullException(nameof(request));


OnSendingRequest(request);
if (!OnSendingRequest(request)) throw new OperationCanceledException();
var results = await Send(request, false).ConfigureAwait(false); var results = await Send(request, false).ConfigureAwait(false);
OnSentRequest(request, null, null, results.Milliseconds); OnSentRequest(request, null, null, results.Milliseconds);
} }
@@ -109,7 +113,7 @@ namespace Discord.Net.Rest
{ {
if (request == null) throw new ArgumentNullException(nameof(request)); if (request == null) throw new ArgumentNullException(nameof(request));


OnSendingRequest(request);
if (!OnSendingRequest(request)) throw new OperationCanceledException();
var results = await SendFile(request, true).ConfigureAwait(false); var results = await SendFile(request, true).ConfigureAwait(false);
var response = Deserialize<ResponseT>(results.Response); var response = Deserialize<ResponseT>(results.Response);
OnSentRequest(request, response, results.Response, results.Milliseconds); OnSentRequest(request, response, results.Response, results.Milliseconds);
@@ -120,7 +124,7 @@ namespace Discord.Net.Rest
{ {
if (request == null) throw new ArgumentNullException(nameof(request)); if (request == null) throw new ArgumentNullException(nameof(request));


OnSendingRequest(request);
if (!OnSendingRequest(request)) throw new OperationCanceledException();
var results = await SendFile(request, false).ConfigureAwait(false); var results = await SendFile(request, false).ConfigureAwait(false);
OnSentRequest(request, null, null, results.Milliseconds); OnSentRequest(request, null, null, results.Milliseconds);
} }


Loading…
Cancel
Save